15

API レベル 8 (2.2、Froyo) を対象とする Android アプリケーションを開発しています。私は a を使用してContentProviderおり、それは十分に単純でありSimpleCursorAdapter、リスト ビューに入力するために使用していますが、SimpleCursorAdapterのドキュメントで、フラグのないコンストラクターが次の注記で非推奨になっていることに気付きました。

このコンストラクターは非推奨です。このオプションは、アプリケーションの UI スレッドでカーソル クエリが実行され、応答性が低下したり、アプリケーションが応答しないというエラーが発生したりする可能性があるため、推奨されません。別の方法として、LoaderManager を CursorLoader とともに使用します。

API レベル 8 をターゲットにしているため、 aLoaderManagerは に関連付けられていませんActivity。互換性パッケージのFragmentActivityクラスはこれを行いますが、フラグメントは使用していません。

私の質問はLoaderManager/CursorLoader、11 より前の API レベルを対象とするアプリでどのように使用すればよいですか? SimpleCursorAdapterFragments に強制的に移行する必要がありますか、それとも非推奨のコンストラクターに戻す必要がありますか (ただしAsyncTask、UI スレッドに適した状態に保つために を使用します。これは、CursorLoaderが行うべきことです)。

4

1 に答える 1

23

編集:

LoaderManagerこのブログ投稿では、についてかなり詳しく書いています。それをチェックして、役に立ったら教えてください!:)


元の投稿:

間違いなく、間違いなく、間違いなく一緒に行きLoaderManagerます。このCursorLoaderクラスは、スレッドにデータをロードする作業をオフロードし、向きの変更などの短期間のアクティビティ更新イベントの間、データを永続的に保ちます。は、最初のクエリを実行するだけでなく、要求されたデータセットに をCursorLoader登録し、データ セットが変更されたときにそれ自体を呼び出して、自動更新します。これは、自分でクエリを実行することを心配する必要がないため、非常に便利です。もちろん、アプリケーションの UI スレッドをフレンドリーに保つために を使用することは可能ですが、より多くのコードが必要になります...そして、たとえば、ロードされたオーバーを保持するようにクラスを実装することは単純ではありません。肝心なのは、ContentObserverforceLoad()AsyncTaskCursorActivityLoaderManager/Loaderはこれを自動的に行い、ライフサイクルにCursor基づいてを正しく作成して閉じActivityます。

LoaderManager/CursorLoader11 より前の API レベルを対象とするアプリで使用するには、互換性パッケージのクラスを使用するだけですFragmentActivity。AFragmentActivityは単なる であり、Android との互換性をサポートするために作成されたものであり、アプリケーションで をActivity使用する必要はありません。の代わりにFragment使用するだけで、準備完了です。もちろん、各画面の親を実装し、そのレイアウトを( Activity のメソッドで使用することにより) に表示させることもできます。この設計により、アプリケーションをタブレット用に最適化することを決定した場合に、マルチペイン レイアウトへの移行が容易になる可能性があります。それもまた素晴らしい学習体験です:)。getSupportLoaderManager()getLoaderManager()FragmentActivityFragmentFragmentActivity.getSupportFragmentManager()onCreate()

これもかなりいいチュートリアルです。他に質問がある場合は、遠慮なくコメントを残してください。

于 2012-01-17T19:13:53.987 に答える