我有ListActivity
使用SimpleCursorAdapter
来显示数据库内容。我在底层数据库更改时刷新视图时遇到问题。
作为一项实验,我在活动的Cursor.requery()
中添加了对onResume()
的调用,以便进行调试,所以我所要做的就是转换到不同的活动并返回它应该强制执行刷新。我也覆盖了onContentChanged()
进行调试。发现requery()
被调用,但这并未导致调用onContentChanged()
。
我怀疑游标正在使用陈旧的缓存数据。提示更改的操作实际上涉及擦除和替换整个数据库。我认为我需要抛弃光标并从头开始重建,而不是简单地重新查询。
我已经尝试关闭并重新打开底层数据库,与Cursor.requery()
一起使用,但是光标似乎不喜欢像这样从数据库中拉出数据库。 (该列表最终为空。)
修改:我还尝试在adapter.notifyDataSetChanged()
中与requery()
一起调用onResume()
,但这没有任何区别。
有什么建议吗?
答案 0 :(得分:1)
通过丢弃光标,关闭并重新打开数据库,然后重新创建光标来解决问题。我使用Observer来通知数据库更改的活动,如下所示:
@Override
public void update(Observable observable, Object data) {
// database changed
runOnUiThread(new Runnable() {
@Override
public void run() {
stopManagingCursor(cursor);
dbAdapter.close();
dbAdapter.open();
cursor = getAccounts();
startManagingCursor(cursor);
adapter.changeCursor(cursor);
}
});
}
答案 1 :(得分:0)
您是否尝试过在ListActivity的onResume()方法中调用SimpleCursorAdapter上的notifyDataSetChanged()?