【问题标题】:How to update ListView in case when database value is changed?如果更改数据库值,如何更新 ListView?
【发布时间】:2011-05-22 15:07:28
【问题描述】:

目前我执行以下操作:

1) 数据库链接到ListView:

String[] from = new String[]{DbAdapter.KEY_TITLE, 
                DbAdapter.KEY_DISPLAYED_VALUE,
                DbAdapter.KEY_FAVORITE};
int[] to = new int[]{R.id.name, R.id.time, R.id.icon};
items = new SimpleCursorAdapter(this, R.layout.row, itemsCursor, from, to);

2) KEY_DISPLAYED_VALUE 在数据库中每 2 秒更改一次。然后items.notifyDataSetChanged() 被调用。但是屏幕上的数据没有更新(R.id.time 目前是TextView,一旦此代码有效,将是TextSwitcher)。

数据库更新为execSQL

【问题讨论】:

    标签: android sqlite textview android-listview


    【解决方案1】:

    那是因为光标中的数据没有改变。在您的情况下,最简单的事情是每次更新数据库中的某些值时调用一个新查询并更改列表的光标(也许有一种通过广播或类似方式通知的方式)。另一种方法是通过查询在光标上注册通知 uri(请参阅 android 的记事本项目示例,了解如何制作内容提供者,尤其是插入方法。

    但是,通过自动查询方式(记事本内容提供程序方式),您将收到每个查询的通知,从而刷新每个项目的列表,并且您说数据库每 2 秒更新一次可能过于频繁,您可能会阻止使您的应用程序无响应的 ui 线程。所以我建议管理你自己的刷新时间(我认为每 5 秒一次就可以了)。

    希望这对您有所帮助,祝您编码愉快。

    【讨论】:

      【解决方案2】:

      这里解释了如何使用 notifyDataSetChanged(),以及为什么您的示例不起作用:

      notifyDataSetChanged example

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多