3

アプリ用のコンテンツ プロバイダーを作成しました。メイン アクティビティで CursorLoader とリストビューを使用して使用しています。リストビューにはいくつかの要素が表示されます。要素は多くのタグにバインドできます。

要素 (_id、説明)、タグ (_id、説明)、要素タグ (idElement、idTag) の 3 つのテーブルを定義しました。

コンテンツ プロバイダーのクエリ メソッドで結合を行いますが、要素には多くのタグを含めることができるためです。リストビューのようなものを取得します(これはクエリの結果でもあります):

  • 要素 1 | タグ1
  • 要素 1 | タグ2
  • 要素 1 | タグ3

しかし、私はしたいです:

  • Element1 Tag1 Tag2 Tag3 (最初のセル)

私は要素とタグの間の結合を作成しないことについて考えましたが、この場合、カーソルアダプターの各要素のタグを照会する必要があります (これは悪いと思います)。

また、おそらく非正規化が最善のアイデアであるというスレッドを読みました (コンマで区切られた要素のタグを含む要素テーブルに列を作成します)。しかし、タグを含むすべての要素を取得したい場合、これは遅くなります。

結合クエリのおかげで、CursorLoader 全体を失望させて、大きなハッシュマップを 1 つだけ作成する必要があるのではないでしょうか?

あなたの考えを本当に感謝します。

前もってありがとう:)

4

1 に答える 1

0

それが役立つ場合は、ここで私の回避策:

コンテンツ プロバイダーのテーブル ELEMENT と TAG の間の結合は行いません。要素のみをロードするので、リスト ビューには要素ごとに 1 行しかありません。CursorAdapter にメソッド loadContent を実装し、タグとタグ/要素の関係テーブルを 2 つのハッシュマップにロードします。

このメソッドは、CursorAdapter コンストラクターで onContentChanged() が呼び出されたときに呼び出されます (このメソッドは、フラグ CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER のおかげで呼び出されます)。

次に、CursorAdapter の bindView メソッドで、カーソルの現在の要素を処理するときに、2 つのハッシュマップのおかげで、要素にバインドされたすべてのタグを取得します。

誰かが興味を持っている場合は、コードを提供できます。

于 2013-02-14T07:43:48.217 に答える