6

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

我给它的游标是基于数据库中的笔记列表(每个笔记都是一个数据库行)。

一切正常,直到我从数据库中删除一条笔记。我不确定如何正确更新光标/适配器/列表视图以显示新数据。

我已经阅读了关于使用adapter.notifyDataSetChanged()vscursor.requery()刷新 UI 的相互冲突的帖子,但在这种情况下,它们似乎都不起作用。我能够刷新它的唯一方法是从新查询创建新光标并调用adapter.changeCursor(newCursor).

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

4

3 回答 3

9

你必须requery然后notifyDataSetChanged

于 2010-08-16T19:28:14.363 回答
1

调用 requery 将重新执行用于创建游标的确切查询 - 也就是说,它不会重新执行代码中的实际方法。因此,如果您的方法包含动态内容,例如基于首选项的排序,则不会更新。在这种情况下,您不想使用相同的查询,而是需要不同的查询。

于 2010-08-16T19:48:36.343 回答
0

这对我有用,我不确定它是最好的方法。

c = db.rawQuery( "SELECT * FROM mytable", null); //same line of the first initialization
adapter.swapCursor(c);

我刷新了唯一的光标,我不知道如何处理新的光标。我也不明白用函数名称回答的人。

于 2014-08-27T14:52:05.450 回答