Android:替换整个数据库时的游标重新查询

时间:2011-01-09 22:57:07

标签: android database listview cursor refresh

我有ListActivity使用SimpleCursorAdapter来显示数据库内容。我在底层数据库更改时刷新视图时遇到问题。

作为一项实验,我在活动的Cursor.requery()中添加了对onResume()的调用,以便进行调试,所以我所要做的就是转换到不同的活动并返回它应该强制执行刷新。我也覆盖了onContentChanged()进行调试。发现requery()被调用,但这并未导致调用onContentChanged()

我怀疑游标正在使用陈旧的缓存数据。提示更改的操作实际上涉及擦除和替换整个数据库。我认为我需要抛弃光标并从头开始重建,而不是简单地重新查询。

我已经尝试关闭并重新打开底层数据库,与Cursor.requery()一起使用,但是光标似乎不喜欢像这样从数据库中拉出数据库。 (该列表最终为空。)

修改:我还尝试在adapter.notifyDataSetChanged()中与requery()一起调用onResume(),但这没有任何区别。

有什么建议吗?

2 个答案:

答案 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()?