web-dev-qa-db-ja.com

Android:CursorLoader、LoaderManager、SQLite

一部のメソッドが廃止されている古いアプリを更新しようとしています。 DBからのデータを表示するListViewを操作する場合は、LoaderManager + CursorLoaderを使用する必要があることがわかりました。 CursorLoaderはコンテンツプロバイダーと連携します。それで、私のdbのすべてのテーブルについて、今すぐコンテンツプロバイダーを作成する必要がありますか?どして私がこんな事に ?私の知る限り、コンテンツプロバイダーは他のアプリケーションといくつかのdb情報を共有するために使用されますが、私のアプリは情報を共有しません。コンテンツプロバイダーなしでCursorLoaderを使用できますか???

29
Jim

この件について ブログ投稿 を書きました。詳細については、この answer も確認してください。うまくいけば、それはあなたのために物事を片付けるでしょう。

Barakが述べたように、AsyncTaskLoader<Cursor>クラスを拡張することで、コンテンツプロバイダーなしでCursorLoaderを実装できます。とは言っても、ほとんどのチュートリアルとサンプルコードはContentProvidersを使用しており、Androidチームもその使用を奨励しているようです。また、独自のコードを実装するよりもはるかに複雑ではありません。クラス。

とは言っても、あなたが本当にコンテンツプロバイダーを使用したくない場合、Dianne Hackborn(Androidフレームワーク開発者の一人であり、 SOの "hackbod")は、コンテンツプロバイダーではなくデータベースクラスを使用する独自のローダーを作成することを提案しています。最も簡単な方法は、互換性ライブラリからCursorLoaderクラスのソースを取得し、プロバイダーのクエリを置き換えることです独自のdbヘルパークラスへのクエリ。

22
Alex Lockwood

はい、できます。カスタムデータローダーを使用して、定義したオブジェクトや、オブジェクトタイプやリストをロードできます。

互換性ライブラリのサンプルとデモで、LoaderCustomSupport.JavaのAndroid sdkのサンプルをご覧ください。

0
DArkO