35

我想知道如何在Android 3.0中使用Loaders,但似乎無法使其工作。該文檔只描述使用CursorLoader,但我使用AsyncTaskLoaderAndroid Honeycomb中的裝載機

從文檔看來,你應該只需要實現AsyncTaskLoader.loadInBackground(),但它永遠不會在getLoaderManager().initLoader()之後被調用,然後在回調中創建加載程序。

我可以看到調試消息說Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}所以它看起來像它被成功創建。

裝載機目前是否可能在SDK中被破壞,或者在創建裝載機後需要調用某種方法? (他們在CursorLoader例子中沒有這樣做)。

編輯:好像呼籲從initLoader()返回的裝載機forceLoad()至少開始加載,但是這意味着你不能正確處理旋轉:(

+0

如果你找到答案,請讓我知道。我一直無法找到任何東西。 – 2011-02-26 18:07:49

+2

還有http://code.google.com/p/android/issues/detail?id=14944提到與「編輯」評論相同的解決方法。 – 2011-02-26 19:55:59

+0

是的,這是我的bug報告:) – alexanderblom 2011-02-26 21:58:39

回答

0

亞歷; 你嘗試,如果onLoadInBackground驗證()甚至調用?

onLoadInBackground():調用一個工作線程來執行實際的加載。實現不應該直接提供結果,但應該從這個方法返回它們,最終最終會調用deliverResult(D) UI線程如果實現需要在UI線程上處理結果,它們可以覆蓋deliverRes超(D),並在那裏做。

1

你需要重寫onStartLoading()方法。看看developer website上的例子。

/** 
    * Handles a request to start the Loader. 
    */ 
    @Override protected void onStartLoading() { 
     if (mApps != null) { 
      // If we currently have a result available, deliver it 
      // immediately. 
      deliverResult(mApps); 
     } 

     // Start watching for changes in the app data. 
     if (mPackageObserver == null) { 
      mPackageObserver = new PackageIntentReceiver(this); 
     } 

     // Has something interesting in the configuration changed since we 
     // last built the app list? 
     boolean configChange = mLastConfig.applyNewConfig(getContext().getResources()); 

     if (takeContentChanged() || mApps == null || configChange) { 
      // If the data has changed since the last time it was loaded 
      // or is not currently available, start a load. 
      forceLoad(); 
     } 
    }