我有点陷入一开始似乎很容易的问题。我想在ListView中显示支持多个标签的项目。我已经设置了一个CursorAdapter来为我的ListView提供必要的数据,但我不太清楚最好的方法是让它工作。
通过使用JOIN,我从数据库中提取了项目和标签。
item1 | tagA
item1 | tagB
item2 | tagC
item3 | tagB
我尝试了很多垃圾,但直到现在都是这样......垃圾。
尽管前两个项共享完全相同的_id
字段,但项目被分配给单独的ListViews,我想这与适配器为Cursor中的每个条目生成一个新列表项的事实有关。在某个地方,我希望它会尝试使用相同的_id
来更新列表条目,这将为我提供一个简单的解决方案,即只需在ViewBinder中编写代码以随时setViewValue()
附加到标记View被称为。
Cursor.moveToNext()
,如果后续游标的id匹配,则将必要的标签TextViews添加到我的ListView中。这不能完全解决我的问题,因为实际ListView的游标不会受到ViewBinder中moveToNext()
调用的影响(由于参数的整个值传递)。 List中的第一项显示所有标记item1 | tagA, tagB
,但下一个Cursor仍显示item1
中已显示的item1 | tagB
,因为适配器的Cursor不能被ViewBinder调用。List<Item>
(而不是Cursor)和arm Item
方法{{1} }轻松提取每个项目的标签。
列表{
Item {id = 1,tags = {tagA,tagB}},
商品{id = 2,tags = {tagC}},
商品{id = 3,tags = {tagB}}
}
我将迭代Cursor集来填充List。但是,要做到这一点,我真的需要知道理解Cursor的内务管理以保持清洁。基本上,我不想提出一个肮脏的解决方案。我打赌你们中的一些人过去曾在某个地方处理过这个问题。解决这个问题的最佳方法是什么?