我正在使用LoaderManager來處理支持列表視圖的查詢。它依賴於一些參數,但直到後來才知道。目前我打電話延遲加載程序管理的查詢的最佳方式是什麼?
getSupportLoaderManager().initLoader(0, null, callback);
在onCreate()。在參數全部已知之前,這將立即創建加載器並執行查詢。爲了處理這個問題,我在onCreateLoader()中有一個虛擬查詢,當並非所有的參數都已知時,我的回調處理程序中會檢查onLoadFinished()是否有合法查詢。如果不是,我忽略遊標數據。當談到時間做一個真正的查詢,我叫
getSupportLoaderManager().restartLoader(0, null, callback);
,也可以設置自己的旗幟爲true,使onLoadFinshed()正確處理它。
我在上面做的事情看起來有點兒怪異;有沒有更好的辦法?我最初嘗試在以後需要查詢時調用initLoader(),但隨後在方向更改時失敗,類似於this question。
答案可能是:不要使用'Loader'。使用別的東西來將工作移動到背景,比如'AsyncTask'。 – CommonsWare 2012-04-04 22:13:19
我很害怕這個。雖然我可能仍然可以使用加載程序而不使用片段特定的LoaderManagers,但是如果我可以推遲片段的創建... – qix 2012-04-11 08:20:49
仍然hacky,但是如果您的虛擬查詢不返回任何行,則不需要onLoadFinished中的標誌(' SELECT * from sqlite_master LIMIT 0' - thanks matt))或者你有一個CursorLoader子類,比如EmptyCursorLoader,它涵蓋了你 – Dori 2012-07-10 14:08:41