当项目数量发生变化时,如何更新与listview绑定的CursorAdapter?

时间:2010-08-16 18:33:50

标签: android listview android-listview

我有一个基于CursorAdapter的自定义适配器支持的ListView。

我给它的光标是基于数据库中的Notes列表(每个音符是一个DB行)。

一切正常,直到我从数据库中删除一个注释。我不确定如何正确更新cursor / adapter / listview以显示新数据。

我阅读了使用adapter.notifyDataSetChanged() vs cursor.requery()来刷新用户界面的相互矛盾的帖子,但在这种情况下它们似乎都不起作用。我能够刷新它的唯一方法是从新查询创建一个新游标并调用adapter.changeCursor(newCursor)

有人可以演示更新支持数据然后更新UI的正确方法(如果可能的话,使用伪代码)。

3 个答案:

答案 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);

我刷新了唯一的光标,我不知道如何处理新光标。 另外,我不理解以函数名称回答的人。