1

我需要從2個來源在線獲取數據,並希望顯示每個進度,因爲我這樣做。一旦收集到數據,我可以填充一個列表視圖。Daisy-chain Android Loaders是不是一個好主意?

我目前的實現是MyActivity實現LoaderCallbacks這反過來又創造MyDataLoader(延伸AsyncTaskLoader類)的一個實例。在MyDataLoader的loadInBackground方法中,它從所有來源獲取數據並填充一個Sqlite數據庫。這個db可以在整個過程中使用。

的問題是,我不會給用戶的任何反饋,凡在這個過程中我們。

所以我想用菊花鏈方式使用getLoaderManager()。initLoader創建我的裝載器,然後逐個遍歷loadermanager中的裝載器。當每個加載器完成並返回到onLoadFinished時,我有機會設置progressDialog的文本來指示進度。

這是一個壞主意嗎?有更簡單更好的方法嗎?

回答

2

這是不可能的,因爲Loader s在單獨的線程背景中加載數據...數據未按順序加載,因此在onLoadFinished中顯示的進度不會讓您準確瞭解實際進行了多少進展。

所有用戶需要知道的是,數據在後臺加載。即使啓動整個對話也有點矯枉過正,並且在我看來會破壞用戶體驗。兩種選擇把我的頭頂部是:

  1. 顯示在您的佈局或動作條不確定的進度圖標。

  2. 顯示一個灰色的TextView,它表示佈局中心的Loading...。當數據從網上獲取並準備好顯示在屏幕上時,TextView終於隱藏起來。有幾個Google製作的應用選擇了這個選項,例如Google Analytics。

+0

悸動者總是一個方便的方法來做到這一點,但如果你事先知道你必須執行2次加載,顯示'0%'''50%'''100%'不是必須的餿主意。這就是說,我們沒有理由去載入資源順序 – Basic 2012-08-02 23:22:51

+0

@alex,將每個裝載機調用onLoadFinished方法分別一旦他們完成或者是有一個單一的電話嗎?或者一旦所有裝載機完成後是否有另一種方法的最終調用? – CarllDev 2012-08-02 23:47:52

+0

@CarllDev裝載機是彼此完全獨立的...'LoaderManager'調用'每一個加載完成其加載時間(注意,這'Loader'將作爲第一個參數的方法也被傳遞)onLoadFinished'。該'LoaderManager'連續起動/停止/復位/破壞'Activity'的裝載機在其整個生命週期,因此具有報告回來時,*所有*的裝載機裝載完畢不會作出任何意義的回調方法。 – 2012-08-02 23:59:44

相關問題