Android 当数据库值更改时,如何更新ListView?

Android 当数据库值更改时,如何更新ListView?,android,sqlite,textview,android-listview,Android,Sqlite,Textview,Android Listview,目前我做了以下工作: 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 SimpleCursorAd

目前我做了以下工作:

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)
键显示值在数据库中每2秒更改一次。然后调用
items.notifyDataSetChanged()
。但屏幕上的数据未更新(
R.id.time
当前为
TextView
,此代码生效后将为
TextSwitcher


数据库更新为

这是因为光标中的数据没有改变。在您的情况下,最简单的方法是调用一个新查询,并在每次更新数据库中的某个值时更改列表的游标(可能有一种通过广播或类似方式进行通知的方法)。另一种方法是在游标上注册一个带有查询的通知uri(请参阅android中的记事本项目示例,该示例介绍如何使内容提供者特别是insert方法

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


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

以下是关于如何使用notifyDataSetChanged()的解释,以及您的示例无法正常工作的原因: