使用HashMap实现适配器

时间:2012-09-26 15:30:18

标签: android android-layout android-listview android-view

ListViewAdapter之前询问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();
}

我已经尝试过它并且工作得很好而且很好。这种实施是否以任何方式受到鼓励?

1 个答案:

答案 0 :(得分:1)

  

我们实际上可以存储所有视图

您应该使用ViewHolder模式。它允许您不创建所有视图,而只创建您需要在屏幕上显示的视图。