【问题标题】:ListView doesn't scroll smoothly when trying to use setText in onScroll尝试在 onScroll 中使用 setText 时,ListView 滚动不顺畅
【发布时间】:2013-09-16 09:22:03
【问题描述】:

我的ListView 上方有一个RelativeLayout,我希望该布局上的TextView 会根据ListView 的第一个可见项的内容而改变。所以我在列表中使用onScrollListener

@Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (adapter != null && adapter.getCount() > 0) {
            Transaction data = (Transaction) adapter.getItem(firstVisbileItem);
            Date date = data.getTransactionDate();
            date.setActualDate(date.getActualDate());
            String month = date.getMonthString(context);
            String year = date.getYear() + "";
            tvLeftValue.setText(month);
            tvRightValue.setText(year);
        }       
    }

真的很奇怪,当我使用它时,列表滚动得很慢,但是当我尝试对两个TextView 使用setText("") 时,列表正常滚动。当我在真实设备(Galaxy S3)上测试时会出现此问题,而不是在 Genymotion 的模拟器上。为什么会发生这么奇怪的问题?有什么可能的解决方案吗?如果你们中的任何人遇到过这种情况,请帮助我并提前感谢。

编辑: 实际上,这也发生在 Genymotion 的模拟器中,它比真实设备中更快,所以我认为它没有发生。

【问题讨论】:

  • 您对此有任何解决方案或找到解决方法吗?
  • @Dittimon 实际上我没有找到任何好的解决方案,所以我不得不改用Amazing ListView 来为我的列表视图制作节标题。
  • 您可能只是过于频繁地设置这种方式并导致不必要的重绘。它可能不起作用,但您可以尝试仅在文本更改时设置文本。

标签: android listview android-listview settext onscroll


【解决方案1】:

onScorll 方法被非常频繁地调用。您在主线程上做的事情太多了。尝试使用工作线程来完成计算工作并使用 Handler 来更新 UI。

【讨论】:

  • 谢谢,我尝试过使用AsyncTask,但并没有改善这种情况。问题是,我尝试注释掉所有负责获取数据的行并将setText 留下随机字符串,但滚动仍然很慢。
【解决方案2】:

这最终解决了我遇到的类似问题Simple TextView.setText causes 40% CPU Usage

基本上,接受的答案是建议设置文本会强制刷新整个布局,因为 TextView 可能已更改大小。

解决方案是修复 textView 的大小。根据您的布局,您仍然可以使用宽度作为匹配父项。

<TextView
     android:layout_width="200dp"
     android:layout_height="32dp"
     android:ellipsize="end" />

【讨论】:

  • 也可以使用相对布局,其中文本视图被缩放以适应 2 个元素 - 这将防止其缩小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多