0

CursorLoader を介して取り込まれたリストビューがあります。CursorLoader は、LoaderManager.LoaderCallback の createLoader メソッドによって作成されます。これで問題ありません。問題は、リストビューの作成が完了したときに別のタスクを開始し、リストビューに追加のデータを入力したいということです。私の現在の解決策は、 onLoadFinished メソッド内で別のローダーを開始することです。

これは正しい解決策ですか、それともよりエレガントで効率的な方法で実行できますか? 私はAndroid開発の経験があまりないので、アドバイスをいただけますか。前もって感謝します。

4

1 に答える 1

3

からの読み込みonLoadFinishedは問題なく動作します。私が持っていたペットプロジェクトで似たようなことをしました。自分の ContentProvider からデータをロードし、そこから電話の Contact ContentProvider から連絡先データをロードしました。私のデータベースの各エントリは複数の連絡先を参照する可能性があるため、どの連絡先情報をロードするかを知る前にアイテムをロードする必要がありました。最初にアイテム データを受け取ったときに、init/restart LoaderManager 呼び出しをチェーンしました。onLoadFinished. それは問題なく動作し、後で連絡先データをリストとして使用しました。確かに、既存のリスト ビュー アイテム内のビューにデータを読み込むためにこのアプローチを使用しませんでした。アイテムの詳細ビューで独自のリスト内のデータを使用しました。やりたいことは引き続き機能するはずですが、特にビューの「ライフサイクル」が制御できないため、ビューなどにデータを追加するのが面倒になる可能性があります。

より良いアプローチ、IMO は、ビューが作成されているときに、AsyncTask または AsyncQueryHandler を使用して余分なデータをフェッチするカスタム CursorAdapter をコーディングすることです。リストがスクロールするときに後で使用できるように、必ずデータをキャッシュしてください。この 2 番目のアプローチには、外部/セカンダリ ローダーから独立しているという利点があります。欠落している部分のロードを含む、必要なデータを表示するために必要なすべてのロジックをカプセル化します。これにより、ビュー データと表示ロジックがまとまり、再利用可能なモジュール内に安全に収納されます。

于 2013-02-26T21:17:53.763 に答える