web-dev-qa-db-ja.com

GetViewVs。カスタムCursorAdapterのBindView?

だから、私はこのビデオを見ています http://www.youtube.com/watch?v=N6YdwzAvwOA とRomain Guyは、getView() 方法。これはCursorAdaptersにも当てはまりますか?現在、カスタムカーソルアダプターにbindView()newView()を使用しています。代わりにgetViewを使用する必要がありますか?

53

CursorAdapterには、getView()newView()に委任するbindView()の実装があり、行のリサイクルパターンを適用します。したがって、newView()およびbindView()をオーバーライドする場合、行のリサイクルのためにCursorAdapterを使用して特別なことをする必要はありません。

73
CommonsWare
/**
     * @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の方が機能します。

19
Crossle Song

CursorAdapterの実装は、BaseAdapterのような通常のサブクラス化アダプターとは異なり、getView()getCount()getItemId()カーソル自体から情報を取得できるため。

Cursorを指定すると、2つのメソッドをオーバーライドするだけでCursorAdapterサブクラスを作成できます。

bindView():ビューを指定し、提供されたカーソルでデータを表示するようにビューを更新します。

newView():これは、リストに入る新しいビューを構築するために呼び出されます。

CursorAdapterは、ビューをリサイクルします(通常のAdaptergetView()メソッドとは異なります)。新しい行が必要になるたびにnewView()を呼び出しません。既にViewnullではない)がある場合、bindView()を直接呼び出します。この方法で、作成されたビューが再利用されます。各ビューの作成と移植をこれら2つのメソッドに分割することにより、CursorAdapterはビューの再利用を実現します。通常のアダプターでは、これらの両方がgetView()メソッドで行われます。

2