1

我將從我嘗試完成的事情開始。帶有Loader和EndlessCursorAdapter的ListFragment - 噩夢

我有一個ListFragment,與LoaderCallbacks關聯從數據庫中檢索數據。數據使用AsyncTask下載,並插入到數據庫中。當用戶到達列表底部,使用CWAC-Endless小部件時,AsyncTask將被啓動並下載更多數據。

我在這裏遇到了幾個問題,我試圖在很多晚上解決這個問題,我決定來這裏尋求幫助。

第一個問題是configChanges。當用戶旋轉設備時,活動將被銷燬,然後重新創建所有碎片。我知道我可以使用setRetainInstance爲true,但是這並沒有幫助,因爲AsyncTask在Activity被取消時仍在運行!

第二個問題是關於Loader的問題。如果下載數據並且AsyncTask完成正常,則這些項目將顯示在「列表」中。可以說數據庫中有20個項目。當用戶旋轉設備並且重新創建碎片時,加載器需要再次關聯。發生這種情況時,數據不會立即加載到列表中,而是下載的AsyncTask被啓動,因爲CWAC-Endless適配器認爲它在列表中的最後一項!

這兩個問題已經耗盡了我。我需要重新審視這一點,因爲即時消息不會在哪裏。

任何建議都可以,如果需要,我可以發佈源代碼。

編輯

確定這裏有一些更多的細節,以幫助一些建議。

我從互聯網上下載數據,每次只能返回一定數量的項目。然後我需要更多的數據(分頁)。

我決定使用一個數據庫,因爲新的Loader功能使得它非常簡單,以確保數據的加載效率和一致性,沒有任何線程問題。 如果放棄Loader方法並使用標準適配器來渲染數據是有意義的,我很樂意放棄這種方法並使用它。我只是想看看有人能夠提供一個洞察,解釋爲什麼這個解決方案如此困難。

感謝,

亞當

回答

1

當用戶到達列表的底部,使用CWAC無頭插件的的AsyncTask將被斷開和下載更多的數據。

FWIW,我沒有嘗試過EndlessAdapter用的東西,這樣的組合(遊標,裝載機和AsyncTask)。特別是,引用文檔:

注意,這已經過測試與ArrayAdapter廣泛,但不得與其他適配器類型

我甚至不是很肯定的使用情況會是怎樣的一個工作EndlessAdapter應用於本地數據庫。如果你有一個瘋狂的長列表(例如,成千上萬行),答案不是「逐步加載」,而是「提供不同的UX以避免長列表」。對於較短的列表,只需加載整個事物並完成它。 EndlessAdapter適用於加載成本高昂的情況(例如Internet訪問)。

這就是說,我會在我的待辦事項列表中加上「玩EndlessAdapterLoader」。

我知道我可以使用setRetainInstance爲true,但這沒有幫助,因爲AsyncTask在Activity被取消時仍在運行!

那麼, 將不會被調用,直到新活動已通過onCreate()獲得。此外,在基於片段的模型中,您的任務應該與片段交談,並且如果該片段通過setRetainInstance(true)保留,則它在舊活動和新活動中都是相同的片段實例。

發生這種情況時,數據不會加載到列表馬上

它應該很快被加載,雖然是異步的。此外,我不明白爲什麼這與首先創建活動時有什麼不同。

,而是用於下載的AsyncTask因爲CWAC,無盡的適配器列表中認爲其在最後一個項目

你不應該創建EndlessAdapter,直到你有後拉開序幕數據。

+0

我有一些更多的意見,但我想知道是否有其他地方我們可以討論這個,因爲我覺得它很長 – Mimminito 2012-03-17 02:42:14

+0

我有任何更新與裝載機和遊標的EndlessAdapter。我也卡在這裏。 – zeeshan 2013-07-13 16:11:10

+0

@zeeshan:'EndlessAdapter'設計用於'ArrayAdapter'。我預計不會添加'Loader'支持,因爲我沒有任何場景可以在'EndlessAdapter'中使用'Loader'。如果您可以加載數據,加載數據,請不要加載數據。 'EndlessAdapter'指的是你需要調用Web服務或獲取數據的地方,在這種情況下,你並沒有很可能使用'Loader'。 – CommonsWare 2013-07-13 16:16:04