2011-01-09 39 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