【问题标题】:How to update a CursorAdapter tied to listview when number of items changes?当项目数量发生变化时,如何更新绑定到列表视图的 CursorAdapter?
【发布时间】:2010-08-16 18:33:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: android listview android-listview


    【解决方案1】:

    你必须requery,然后notifyDataSetChanged

    【讨论】:

    • 我认为 requery 模型已被废弃(至少不推荐)。 CursorLoader 是目前首选的方法。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-10-06
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        相关资源
        最近更新 更多