だから、私はこのビデオを見ています http://www.youtube.com/watch?v=N6YdwzAvwOA とRomain Guyは、getView()
方法。これはCursorAdaptersにも当てはまりますか?現在、カスタムカーソルアダプターにbindView()
とnewView()
を使用しています。代わりにgetViewを使用する必要がありますか?
CursorAdapter
には、getView()
とnewView()
に委任するbindView()
の実装があり、行のリサイクルパターンを適用します。したがって、newView()
およびbindView()
をオーバーライドする場合、行のリサイクルのためにCursorAdapter
を使用して特別なことをする必要はありません。
/**
* @see Android.widget.ListAdapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}
bindView(v, mContext, mCursor);
return v;
}
このCursorAdapterのソースコードは、明らかにcursorAdapterの方が機能します。
CursorAdapter
の実装は、BaseAdapter
のような通常のサブクラス化アダプターとは異なり、getView()
、getCount()
、getItemId()
カーソル自体から情報を取得できるため。
Cursor
を指定すると、2つのメソッドをオーバーライドするだけでCursorAdapter
サブクラスを作成できます。
bindView()
:ビューを指定し、提供されたカーソルでデータを表示するようにビューを更新します。
newView()
:これは、リストに入る新しいビューを構築するために呼び出されます。
CursorAdapter
は、ビューをリサイクルします(通常のAdapter
のgetView()
メソッドとは異なります)。新しい行が必要になるたびにnewView()
を呼び出しません。既にView
(null
ではない)がある場合、bindView()
を直接呼び出します。この方法で、作成されたビューが再利用されます。各ビューの作成と移植をこれら2つのメソッドに分割することにより、CursorAdapter
はビューの再利用を実現します。通常のアダプターでは、これらの両方がgetView()
メソッドで行われます。