具有列表视图和多对多关系的内容提供商

时间:2013-02-11 08:57:50

标签: android listview cursor android-contentprovider

我为我的应用创建了一个内容提供程序,我在我的主要活动中使用CursorLoader和listview。列表视图显示一些元素。元素可以绑定到许多标签。

我定义了3个表:Element(_id,description),Tag(_id,description),ElementTag(idElement,idTag)。

在内容提供者的查询方法中,我进行了连接,但由于Element可以有很多标记。我在listview中得到的东西(这也是我的查询结果):

  • Element1 | Tag1
  • Element1 | TAG2
  • Element1 | TAG3

但我想:

  • Element1 Tag1 Tag2 Tag3(第一个单元格)

我虽然没有在Elements和Tags之间进行连接,但在这种情况下我应该查询Cursor Adapter中每个元素的标签(我猜这很糟糕)。

我还读过一个线程,可能非规范化是最好的主意(在Element表中创建一个包含由逗号分隔的元素标记的列)。但是当我希望获得包含标签的所有元素时,这将会很慢。

也许我必须放下整个CursorLoader的东西,只需要通过连接查询制作一个大的hashmap?

我真的很感激你的想法。

提前感谢您:)

1 个答案:

答案 0 :(得分:0)

如果它可以提供帮助,请点击此处:

我不在内容提供程序中的表ELEMENT和TAG之间进行任何连接。我只加载元素,所以在列表视图中每个元素只有一行。 我在CursorAdapter中实现了一个方法loadContent,我在两个哈希映射中加载了我的标签和标签/元素关系表。

在CursorAdapter构造函数中调用此方法,并且在调用onContentChanged()时(由于标志CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER而调用此方法)。

然后在CursorAdapter的bindView方法中,当处理游标当前元素时,由于两个哈希图,我得到绑定到我的元素的所有标记。

如果有人感兴趣,我可以提供一些代码。