使用复杂项目优化ListView性能

时间:2017-01-09 15:29:29

标签: android listview

我有一个ListView,有相当高大和复杂的项目,但没有太极端。每个项目都是CardView,行数不同。

不幸的是,似乎很难让滚动完全顺利。

即使适配器的getView()方法除了返回循环视图之外几乎没有任何作用,但是有超过16ms的帧。

慢速帧的绘制时间比其他帧(例如8ms)慢很多,因为当用户滚动到该项时,该项无效并被绘制到缓存中(我假设)。

我尝试将scrolling_cache设置为false,没有帮助。使用RecyclerView也没有改善性能。

1 个答案:

答案 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函数中的任何数据库调用或循环。你可能已经考虑过了。我只是完全放下我的想法。