ListView
sは、画面に表示される前にAdapter
sを要求します。View
のデフォルトの実装は、実際にビューを要求したAdapter
ときにビューを膨らませます。ListView
を使用する場合Object extends ArrayAdapter<MyObject>
、実際にはすべてのビューをaに格納してHashMap<MyObject, SoftReference<View>>
オーバーライドできるため、1回だけArrayAdapter.getView
膨らませることができますが、パスして作成した場合(または奇妙な理由で作成された場合)、再度膨らませます。Views
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();
}
私はそれを試しました、そしてそれはうまくそして素晴らしい働きをします。この実装は何らかの形で推奨されていませんか?