我有一个ListView
,有相当高大和复杂的项目,但没有太极端。每个项目都是CardView
,行数不同。
不幸的是,似乎很难让滚动完全顺利。
即使适配器的getView()
方法除了返回循环视图之外几乎没有任何作用,但是有超过16ms的帧。
慢速帧的绘制时间比其他帧(例如8ms)慢很多,因为当用户滚动到该项时,该项无效并被绘制到缓存中(我假设)。
我尝试将scrolling_cache
设置为false
,没有帮助。使用RecyclerView
也没有改善性能。
答案 0 :(得分:0)
首先,ListView
不应该有复杂的布局。如果ListView
项可以扩展或类似,可以采用其他方法。您可以考虑将ExpandableListView
用于此目的。
但无论如何,由于你的列表项是一个复杂的项目,我之前遇到了类似的情况,我不得不尽可能地简化列表项布局。我将所有LinearLayout
替换为RelativeLayout
,以便减少View
层次结构。
如果您的列表项(即CardView
)包含任何图像,您可能已经考虑过使用Glide或Picasso来加载图像。
我曾经使用的另一个技巧是使用ListView
检测onScrollListener
中的fling滚动,以查找复杂的列表项。
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
if(scrollState != SCROLL_STATE_FLING) {
// Populate views here
}
}
避免getView
函数中的任何数据库调用或循环。你可能已经考虑过了。我只是完全放下我的想法。