2013-02-11 61 views
3

我爲我的應用程序創建了一個內容提供者,我在CursorLoader和listview的主要活動中使用它。該列表視圖顯示一些元素。元素可以綁定到許多標籤。我定義了3個表格:Element(_id,description),Tag(_id,description),ElementTag(idElement,idTag)。帶有列表視圖和多對多關係的內容提供者

在內容提供者的查詢方法中,我做了我的連接,但是因爲元素可以有很多標籤。我在我的listview(這也是我的查詢結果)中得到類似的東西:

  • Element1 | Tag1
  • Element1 | Tag2
  • Element1 | TAG3

但我想:

  • 部件1 Tag1中與Tag2 TAG3(第一單元)

我雖然關於不使元素和標籤之間,但在這種情況下,加入我應該查詢光標適配器中的每個元素的標籤(這是我猜的不好)。

我也讀過一個線程,也許反規範化是最好的主意(使元素表中的一列包含用逗號分隔的元素的標籤)。但是,當我想要獲取包含標籤的所有元素時,這會很慢。

也許我必須讓整個CursorLoader的東西,讓一個大的哈希映射感謝連接查詢?

我真的很感激你的想法。

感謝你提前:)

回答

0

如果它可以幫助,在這裏我的解決方法:

我沒有做任何的內容提供商的表元和TAG之間的連接。我只加載元素,所以我在列表視圖中每個元素只有一行。 我在CursorAdapter中實現了一個方法loadContent,我在兩個hashmaps中加載了我的標籤和標籤/元素關係表。

此方法在CursorAdapter構造函數中調用,並且onContentChanged()被調用時(此方法由於標誌CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER而被調用)。

然後在CursorAdapter的bindView方法中,當處理遊標當前元素時,由於兩個hashmaps,我得到了綁定到我的元素的所有標記。

如果有人有興趣,我可以提供一些代碼。