我有一个基于CursorAdapter的自定义适配器支持的ListView。
我给它的光标是基于数据库中的Notes列表(每个音符是一个DB行)。
一切正常,直到我从数据库中删除一个注释。我不确定如何正确更新cursor / adapter / listview以显示新数据。
我阅读了使用adapter.notifyDataSetChanged()
vs cursor.requery()
来刷新用户界面的相互矛盾的帖子,但在这种情况下它们似乎都不起作用。我能够刷新它的唯一方法是从新查询创建一个新游标并调用adapter.changeCursor(newCursor)
。
有人可以演示更新支持数据然后更新UI的正确方法(如果可能的话,使用伪代码)。
答案 0 :(得分:9)
您必须requery
然后notifyDataSetChanged
。
答案 1 :(得分:1)
调用requery将重新执行用于创建游标的确切查询 - 也就是说,它不会在代码中重新执行实际方法。因此,如果您的方法包含动态内容,例如基于首选项的排序,则不会更新。在这种情况下,您不希望使用相同的查询,而是希望使用不同的查询。
答案 2 :(得分:0)
这对我有用,我不确定它是最好的方法。
c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the first initialization
adapter.swapCursor(c);
我刷新了唯一的光标,我不知道如何处理新光标。 另外,我不理解以函数名称回答的人。