ListView适配器:缓存视图



在为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上再次渲染bitmaps。

除了浪费内存以将所有列表项目视图保留在内存中吗?

之外,这种方法是否有任何错误?

我尝试缓存视图,似乎会引起各种随机问题,例如单击"缓存视图上的事件",等等,等等。

我不知道这些问题的原因是什么以及是否可以在某种程度上修复,因此我决定重复使用convertView而不是缓存视图。

最新更新