2

ViewPager を使用して、単一の Cursor (元は ContentProvider から) からページごとに複数のアイテムを表示したいと思います。レイアウトはグリッドとして表示され、各アイテムの画像とテキストが含まれます。データ構造を再構築せずに UI に反映する必要があるリストへの追加と削除が頻繁に発生します (これにより、以下のいくつかのオプションが除外される場合があります)。

現在のプロセス:

  1. メイン アクティビティでカーソルをインスタンス化します。
  2. カーソルを受け取る PagerAdapter から拡張された独自の Cursor Adapter クラスを作成します。カーソルは、getCount() によって ViewPager が保持するページ数を決定するために使用されます (その後、ページごとに表示されるアイテムの数に応じて調整されます)。
  3. Cursor Adapter の getItem メソッドでは、最終的にリストのサブセットを含むフラグメントを作成します。

この段階では、どの方法が最適かはわかりません。私は:

A. カーソルとインデックスを Fragment に渡して、結果の次のページを表示します (たとえば、setCursorIndex( Cursor, int ) メソッドを使用します) 。

B. 結果を取得する ContentUris 文字列のリストを渡します。(これにより、リストを再構築せずにリストを更新できなくなるでしょうか?)

C. 項目を含む引数バンドル (画像とテキストのバイト配列を含むリスト) を作成します。(これは画像を使用しているため、効率が悪いようです。)

D. アダプターから開始インデックスを受け取った各 Fragment で新しい Cursor を再作成します。(非効率的な?)

助けてくれて本当にありがとうございます。

4

1 に答える 1

2

私見、答えは B と C の組み合わせです。

引数を作成し、おそらくファクトリ メソッド パターン (たとえば ) を使用して にBundle渡す限り、これは C です。このようにして、フラグメントが破棄されて再作成される場合、構成の変更中にフラグメントにすべてのデータが含まれます。FragmentnewInstance()

ただし、「画像とテキストのバイト配列を含むリスト」は不適切なようです。画像のUri値 (または値Stringの表現)が既にある場合は、それらを に配置し、集中型の画像キャッシュ ソリューション ( this onethis oneなど) を使用して、必要なときにのみこれらの画像を確実に読み込むようにします。他の小さなもの (「およびテキスト」) は、.UriBundleBundle

オプション A はおそらく機能しますが、次のことを考慮する必要があります。

  • 構成の変更 (ユーザーが画面を回転させ、アクティビティが破棄/再作成されるとどうなりますか?)
  • の暗黙的な現在行ポインターCursor(各フラグメントはmoveToPosition()、データを読み取ろうとする前に必要です)
于 2012-12-29T15:40:06.800 に答える