私の質問は、CursorAdapter は内部で ViewHolder パターンを実装してビューを再利用するのか、それともカスタム ArrayAdapter で通常行うようにコーディングする必要があるのかということです。
ViewHolder
パターンで何を参照しているのかわかりません。毎回ビューを探してキャッシュするヘルパー クラスを持つことを参照している場合 (およびそれを行のタグとして設定する場合View
)、答えはノーです。このパターンを実装する場合は、メソッドでホルダーをセットアップし (行ビューでビューを探しますfindViewById
)、newView
それを行ビューのタグとして設定する必要があります。次に、bindView
メソッドで を呼び出しgetTag
、ホルダーを取得して使用します。例:
// custom CursorAdapter ...
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View rowView = ((LayoutInflater) context
.getSystemService("layout_inflater")).inflate(
R.layout.row_layout, parent, false);
ViewHolder holder = new ViewHolder();
holder.v1 = rowView.findViewById(R.id.v1);
holder.v2 = rowView.findViewById(R.id.v2);
rowView.setTag(holder);
return rowView;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
// use the holder filled with views
// hlder.v1.setSomething
}
class ViewHolder {
View v1, v2;
}
// ...
convertView
(非ベースのアダプターのように) 再利用されていることを参照している場合Cursor
、答えは「はい」です。メソッドはこのパターンを実装します。メソッドとメソッドgetView
を実装するだけで、リサイクルされたビューを取得することが保証されます (可能な場合)。その瞬間に)。newView
bindView