web-dev-qa-db-ja.com

startManagingCursorからCursorLoaderに(適切に)移行するにはどうすればよいですか?

Android SDKを最新バージョンに更新しましたが、startManagingCursor()deprecatedと表示されます。更新のサポートが必要です。新しいCursorLoaderを使用するコード。

_private void fillData() {
    Cursor notesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(notesCursor);
    NoteAdapter notes = new NoteAdapter(this,  R.layout.notes_row, notesCursor);
    setListAdapter(notes);
}
_

それで、startManagingCursor()は古いですが、翻訳された場合、新しいコードはどのようになりますか?

19
DreamHawk

まず、startManagingCursor()は引き続き機能します。メインアプリケーションスレッドでデータベースI/Oを実行するという点で、理想的ではありません。 Androidでは、「非推奨」とは通常、「使用することをお勧めするより良いと思われるものが他にある」ことを意味します。そのため、アプリの開発サイクルで意味がある場合は、移行を検討する必要があります。

次に、Selvinが指摘したように、SDKはLoaderContentProvider実装のみを提供します。私は SQLiteにLoaderを提供するプロジェクト を直接持っています。

第三に、あなたのコードには実際にはまっすぐな「翻訳」はありません。 Loaderフレームワークは非同期でイベント駆動型ですが、コードはそうではありません。

一般的に言って、あなたのLoaderはメモをフェッチする責任があり、あなたがListViewから配達されたとき、あなたはonLoadFinished()にあなたのCursorを入力しますLoader

16
CommonsWare