尝试在onScroll中使用setText时,ListView无法顺畅滚动

时间:2013-09-16 09:22:03

标签: android listview android-listview settext onscroll

我的RelativeLayout上面有ListView,我希望该布局上的TextView根据{{1}的第一个可见项的内容进行更改}。所以我在我的列表中使用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); } } 使用setText("")时,列表正常滚动。当我在真实设备(Galaxy S3)上测试时,而不是在Genymotion的模拟器上测试时会出现此问题。为什么会发生这样一个奇怪的问题?这有什么可能的解决方案吗?如果您有任何人遇到过这种情况,请提前帮助我并提前致谢。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

解决方案是修复textView的大小。您仍然可以使用宽度作为匹配父级,具体取决于您的布局。

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