2011-05-22 141 views
3

目前我做到以下几点:如何在数据库值更改的情况下更新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

回答

3

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

然而,通过走autorequery(记事本内容提供者方式)您将收到每个查询的通知,因此会刷新每个项目的列表,并且您说数据库每2秒更新一次可能太频繁,并且您可能会阻止ui线程使您的应用程序无响应,因此我建议管理自己的刷新时间(我认为像每5秒一次将正常工作)。

希望这有助于编码快乐。

相关问题