2012-04-13 32 views
19

私はアンドロイドSDKを最新バージョンに更新しました。startManagingCursor()deprecatedです。新しいCursorLoaderを使用するように私のコードを更新するのに助けが必要です。startManagingCursorからCursorLoaderへの(適切な)遷移方法

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

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

+1

CursorLoaderはContentProviderに準拠して動作します。したがって、rhisコードを "翻訳"することはできません.... – Selvin

+0

http://www.androiddesignpatterns.com/2012/07/loaders-and-loadermanager-background。 html – user1422551

+0

減価償却された方法に対するこの回答を覚えておくとよいでしょう。それは主スレッド上で実行されていることが分かります。スレッドが減速するため、そのスレッドは減価償却されました。 [link](http://stackoverflow.com/questions/19651680/cursorloader-with-startmanagingcursor) – Azurespot

答えて

16

まず、startManagingCursor()はまだ動作します。それは、メインのアプリケーションスレッドでデータベースI/Oを実行するという点で理想的ではありません。 Androidでは、一般に「非推奨」とは「使用することを推奨するその他のものがある」という意味です。したがって、アプリの開発サイクルで意味がある場合は、移行を検討する必要があります。

第2に、SDKはContentProviderLoader実装のみを提供しています。私はa project that offers a Loader for SQLiteを直接持っています。

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

は、一般的に言えば、あなたのLoaderはノートをフェッチするための責任を負うことになる、とあなたがLoaderからCursorを配信しているときは、onLoadFinished()であなたのListViewを取り込みます。

+2

新しいコードをビルドする場合は、ここで考えを追加するだけで、廃止予定のAPIを使用しないでください。 –

+22

@EthanAllen:ナンセンス。まず、古いデバイスをサポートしたい場合は不可能です。たとえば、廃止予定のメソッドを使用せずにAPIレベル10以下で動作する 'PreferenceActivity'を作成することはできません。廃止に関する警告は、ケースバイケースで検討する必要があります。 *一般的には、可能であれば廃止予定のメソッドを避けたい。しかし、「決して」はこのケースを誇張している。 – CommonsWare

+0

優れた分析。更新されました! –

関連する問題