15

アプリケーションに関連するすべてのデータの挿入と取得を処理する ContentProvider があります。Google I/O で Virgil Dobjanschi によって提案されたパターンに従っています。最初のパターンを使用しています。

私の問題は、データベース内の複数のテーブルによって表される論理エンティティがあることです。

たとえば、Articles テーブルと ArticleExtras テーブルがあります。Articles は記事自体を表し、ArticleExtras は特定の記事に関する追加情報 (コメント数など) を表します。

UI で CursorAdapter を使用して、記事のタイトルとその記事のコメント数を ListView の 1 行に表示しました。

これを実装するleft outer join ArticleExtras onために、Article テーブルの ContentProvider クエリ メソッドにステートメントを追加して、CursorAdapter が ArticleExtras を Article 自体と共に取得できるようにしました。

新しい記事が Web からフェッチされると、ContentProvider を介してデータベースに挿入し、CursorAdapter が通知を受けて UI を更新すると、この部分は期待どおりに機能しました。

しかし、コメント (ArticleExtras) の数を取得したときにcontent://com.myapp.content/Articles、ListView の行を更新できるように、の変更を監視している同じ CursorAdapter にも通知する必要があります。

私の現在の実装は次のようなものです。ArticleExtras をデータベースに挿入した後、Articles テーブルに挿入した ArticleExtras に関連する行があるかどうかを確認する新しいクエリを開始します。その場合、その記事の新しい uri を作成し (例: content://com.myapp.cotent/Articles/123)、 を呼び出しますgetContext().getContentResolver().notifyChange(uri, null)。これにより、この記事の変更を監視している対応する CursorAdapter が通知されます。

アプローチは正しいですか、それとも私が望むものを実装するためのより良い方法はありますか?

4

1 に答える 1