2014-10-30 56 views
1

我從cursorLoader加載cursoradpater。當我第一次打開片段時,它按預期工作。但是,當我去具有相同的裝載機ID的另一個片段,然後回來Adapter.getCount()返回0時Adapter.getCursor()。getCount將()返回1.我追查利用getCount方法CursorAdapter getCount 0在後面按

public int getCount() { 
    if (mDataValid && mCursor != null) { 
     return mCursor.getCount(); 
    } else { 
     return 0; 
    } 
} 

的問題是mDataValid是false;當我嘗試重新啓動加載程序時,它仍然認爲它無效。我如何讓我的適配器有效?

+0

什麼定義'mDataValid'?你在哪裏改變它? – 2014-10-30 17:37:25

回答

1

你發佈了一小段代碼,但我會盡力幫助你。每當數據集失效(或mDataValid爲false)時,您需要調用changeCursor()。它基本上意味着數據庫已更改,並且適配器需要重建其緩存的數據。

我假設你的適配器中有一個DataSetObserver?如果是這樣,只需在onInvalidated()方法中調用changeCursor即可。如果你沒有,請留下評論,我會幫你添加一個到你的適配器。

+0

changeCursor()不起作用。我能夠通過創建一個新適配器並重新啓動加載程序來重新加載它。不理想的原因片段應該有所有的數據,並不需要重新加載它 – user1634451 2014-10-30 17:46:35

+0

嗯,它應該已經changeCursor(null)或changeCursor(getCursor())取決於changeCursor()的實現。 – jvrodrigues 2014-10-30 17:48:18

+0

changeCursor()實現來自CursorAdapter類。我嘗試從光標加載器保存光標,然後在後退按下changeCursor(savedCursor) – user1634451 2014-10-30 17:54:07