在为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
而不是缓存视图。