0

ListViewsは、画面に表示される前にAdaptersを要求します。Viewのデフォルトの実装は、実際にビューを要求したAdapterときにビューを膨らませます。ListView

を使用する場合Object extends ArrayAdapter<MyObject>、実際にはすべてのビューをaに格納してHashMap<MyObject, SoftReference<View>>オーバーライドできるため、1回だけArrayAdapter.getView膨らませることができますが、パスして作成した場合(または奇妙な理由で作成された場合)、再度膨らませます。ViewsGarbageCollectorViews nullSoftReferencesnull

@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 に答える