3

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

我定义了3个表:元素(_id,描述),标签(_id,描述),元素标签(idElement,idTag)。

在内容提供者的查询方法中,我做了我的加入,但因为一个元素可以有很多标签。我在我的列表视图中得到类似的东西(这也是我查询的结果):

  • 元素1 | 标签1
  • 元素1 | 标签2
  • 元素1 | 标签3

但我想:

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

我虽然不想在元素和标签之间建立连接,但在这种情况下,我应该查询光标适配器中每个元素的标签(我猜这很糟糕)。

我还在一个线程上读到,也许非规范化是最好的主意(在元素表中创建一列,其中包含用逗号分隔的元素的标签)。但是当我想获取所有包含标签的元素时,这会很慢。

也许我不得不放下整个 CursorLoader 的事情,并且由于连接查询而只制作一个大哈希图?

我真的很感激你的想法。

提前谢谢你:)

4

1 回答 1

0

如果它可以帮助,这是我的解决方法:

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

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

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

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

于 2013-02-14T07:43:48.217 回答