ListView适配器:缓存视图

时间:2017-12-10 12:34:51

标签: android

为ListViev实现适配器时,必须实现getView()方法。

我缓存了在getView()中创建的视图,并在getView()再次调用同一位置时返回了缓存视图。

@Override
View getView(int position, View convertView, ViewGroup parent) {
    View currentView = getCachedView(position);
    if (currentView == null) {
        currentView = createView();
        cacheView(currentView, position);
    }
    return currentView;
}

执行此操作的原因是使ListView滚动更快,因为每次调用getView()时,适配器都不必再次创建视图。

我知道这违背了使用适配器的目的,但我的ListView只有很少的项目,并且将所有项目视图保留在内存中并不是一个很大的开销。另一方面,创建视图的成本很高,因为项目的布局有点复杂并且有位图。

另外,我知道我可以重用convertView,但缓存已创建的视图要简单得多,并且无需再次在convertView上呈现位图。

除了浪费内存以将所有列表项视图保留在内存中之外,这种方法还有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我尝试缓存视图,似乎会导致各种随机问题,例如缓存视图上的点击事件未正常触发等等。

我不知道这些问题的原因是什么,以及它们是否可以修复,所以我决定重新使用convertView而不是缓存视图。