2011-01-09 27 views
0

当我有一个ListActivity其使用SimpleCursorAdapter显示数据库的内容。我在底层数据库更改时刷新视图时遇到问题。的Android:光标重新查询更换整个数据库

作为一个实验,我在活动的onResume()中添加了对Cursor.requery()的调用,以便进行调试,所以我所要做的就是翻转到不同的活动并返回,并且它应该强制刷新。我也重写了onContentChanged(),以进行调试。它蒸发requery()被调用,但这不是导致对onContentChanged()通话。

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

我已经尝试关闭并重新打开底层数据库,并与Cursor.requery()一起使用,但光标似乎不喜欢将db从它的脚下拉出来,就像这样。 (这个清单最后是空的。)

编辑:我也试过拨打adapter.notifyDataSetChanged()旁边requery()onResume(),但它没有区别。

有什么建议吗?

回答

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); 
     } 
    }); 
} 
0

你有没有打过电话您SimpleCursorAdapter notifyDataSetChanged()从ListActivity的的onResume()方法中?

+0

是的,那也没有效果。我会更新这个问题。 – 2011-01-09 23:07:59