为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
上呈现位图。
除了浪费内存以将所有列表项视图保留在内存中之外,这种方法还有什么问题吗?
答案 0 :(得分:0)
我尝试缓存视图,似乎会导致各种随机问题,例如缓存视图上的点击事件未正常触发等等。
我不知道这些问题的原因是什么,以及它们是否可以修复,所以我决定重新使用convertView
而不是缓存视图。