我有一個CursorLoader
,它向ListFragment
提供數據。我已經通知機制正確地在我ContentProvider
配置有:當活動暫停時取消光標加載器
cursor.setNotificationUri(getContext().getContentResolver(), uri);
和
getContext().getContentResolver().notifyChange(uri, null)
當我選擇列表項目,一個新的子Activity
被打開,在此Activity
我做的onCreate()
查詢修改項目詳細信息。
我知道通知被解僱,CursorLoader
重新查詢內容提供者。
我現在面臨的問題是,有時我CursorLoader
被取消,因爲父Activity
被暫停(或停止)和onLoadFinished()
不會被調用。
當CursorLoader
被取消,即使我重新初始化的ListFragment
的裝載機onResume()
,我不能看到數據中的任何改變:
@Override
public void onResume() {
super.onResume();
getLoaderManager().initLoader(URL_LOADER, null, this);
}
我使用支持庫V4。
我假設CursorLoader
更新了父母Activity
,即使它在後臺。 ListFragment
恢復時是否需要重新啓動加載程序?
(編輯)
我忘了提,我創建和啓動從ListFragment
裝載機。
經過一番調試後,我發現當ListFragment
停止時,加載器管理器會取消該片段的所有當前加載器。
就我而言,當創建新的子活動時,db更改會觸發一個通知,使加載程序執行重新查詢。如果查詢在父代片段停止前未完成,則加載器將被取消,並且舊遊標仍然有效。當我從子活動導航回到此父活動並帶有ListFragment
時,顯示的數據來自舊遊標。在這種情況下,通知丟失了,我必須重新啓動加載程序onResume()
。
我做了一個測試,只是在孩子活動開始後的10秒後修改了數據庫,並且因爲加載程序沒有被取消(因爲父活動已經停止),所以當我返回父活動時收到一個新的遊標。
每當家長活動恢復時,任何人都可以幫助我找到一種不涉及強制重新查詢(restartCursor()
)的解決方案嗎?
您何時打電話給.notifyChange? – pskink
@pskink在ContentProvider當我改變我的ListFragment的項目。這發生在onCreate()中的子活動中。 –
確定什麼標誌你在一個CursorAdapter使用?我使用的是相同的機制和通知都不會丟失 – pskink