31

ViewHolderカスタムArrayAdapterクラスでは常にパターンを使用します。ただし、 inメソッドは必須ではなく、オーバーライドする必要がありますが、CursorAdapterandメソッドがあります。getView()bindViewnewView

私の質問はCursorAdapter、パターンを内部的に実装してビューを再利用するか、それともViewHolder通常カスタムで行うようにコーディングする必要があるArrayAdapterかです。コード化する必要がある場合、それを行う正しい方法は何ですか?

アップデート

私は使用していますandroid.support.v4.widget.CursorAdapter

4

2 に答える 2

40

私の質問は、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を実装するだけで、リサイクルされたビューを取得することが保証されます (可能な場合)。その瞬間に)。newViewbindView

于 2012-10-12T14:13:22.143 に答える
3

のプラットフォーム バージョンまたはサポート ライブラリ バージョンのどちらを使用しているかを示していませんCursorAdapter。どちらの場合も、Android はオープン ソースなので、自分で探すことができます。

android.support.v4.widget.CursorAdapter
android.widget.CursorAdapter

Chrome を使用している場合は、Android SDK リファレンス検索コンポーネントが非常に役立ちます!

于 2012-10-12T14:11:57.823 に答える