0

ListViews在屏幕上看到之前向 s 询问Adapters 。Viewan 的默认实现Adapter实际上会在ListView请求时夸大您的视图。

使用 an 时Object extends ArrayAdapter<MyObject>,我们实际上可以将所有视图存储在 aHashMap<MyObject, SoftReference<View>>和 override中ArrayAdapter.getView,因此我们只能膨胀Views一次,但如果GarbageCollectorpass 和 make our Views null(或 mySoftReferencesnull出于任何奇怪的原因制作的)我们会再次膨胀它们。

@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();
}

我试过了,效果很好。是否以任何方式不鼓励这种实施?

4

1 回答 1

1

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

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

于 2012-09-26T15:54:37.610 回答