ListView
在Adapter
之前询问View
s,然后才能在屏幕上看到它们。当Adapter
要求时,ListView
的默认实施会实际上夸大您的观看次数。
使用Object extends ArrayAdapter<MyObject>
时,我们实际上可以将所有观看结果都存储在HashMap<MyObject, SoftReference<View>>
中并覆盖ArrayAdapter.getView
,这样我们就可以只将Views
充气一次,但如果{ {1}}通过我们的GarbageCollector
Views
(或null
SoftReferences
因任何奇怪的原因而成为null
)我们再次给他们充气。
@Override
public View getView(final int position, final View convertView,
final ViewGroup parent)
{
final MyObject mo = getItem(position);
if (hashMap.get(mo) == null || hashMap.get(mo).get() == null)
{
final MyCustomView mcv = new MyCustomView(getContext());
hashMap.put(mo, new SoftReference<MyObject>(mcv));
}
return hashMap.get(mo).get();
}
我已经尝试过它并且工作得很好而且很好。这种实施是否以任何方式受到鼓励?
答案 0 :(得分:1)
我们实际上可以存储所有视图
您应该使用ViewHolder模式。它允许您不创建所有视图,而只创建您需要在屏幕上显示的视图。