如果更改数据库值,如何更新ListView?

时间:2011-05-22 15:07:28

标签: 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 SimpleCursorAdapter(this, R.layout.row, itemsCursor, from, to);

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

数据库使用execSQL进行更新。

2 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助,快乐编码。

答案 1 :(得分:2)

以下是有关如何使用notifyDataSetChanged()的说明,以及您的示例无效的原因:

notifyDataSetChanged example