35

私はLoadersをAndroid 3.0に使用する方法を理解しようとしていますが、動作させることはできません。ドキュメントではCursorLoaderを使用して説明していますが、AsyncTaskLoaderを使用しています。Androidハニカムのローダー

AsyncTaskLoader.loadInBackground()を実装する必要があるだけですが、getLoaderManager().initLoader()の後にコールされることはなく、コールバックにローダーを作成することはありません。

Created new loader LoaderInfo{4040a828 #0 : ArticleDataLoader{4036b350}}というデバッグメッセージが表示されるので、正常に作成されたようです。

ローダーがSDKで現在壊れている可能性がありますか、ローダーの作成後に呼び出す必要のあるメソッドがありますか? (彼らはCursorLoaderの例でそれをしていない)。

EDITは:;)( あなたがonLoadInBackgroundかどうかを検証してみました、少なくともロードを開始しinitLoader()から返されたローダーのforceLoad()を呼び出すように思えるが、これは、あなたが正しく回転を扱うことができない:(

+0

この回答を見つけた場合は、私にもお知らせください。私は何かを見つけることができませんでした。 –

+2

http://code.google.com/p/android/issues/detail?id=14944には、「編集」コメントと同じ回避策が記載されています。 –

+0

はい、これは私のバグレポートです:) – alexanderblom

答えて

13

Dianne Hackbornがバグトラッカーに返答し、私たちに静的ライブラリ実装を紹介しました。 CursorLoaderはforceLoad()を行っています。これが働いています。

はバグトラッカーで最も簡単な例ではあなたのためにこれを処理するクラスのための私の添付クラスを参照してください:あなたはonStartLoading()メソッドをオーバーライドする必要がhttp://code.google.com/p/android/issues/detail?id=14944

+4

彼らは本当にCPLを文書化する必要があります。< – schwiz

+1

それは本当に吸う。したがって、ここに示されている例:http://developer.android.com/reference/android/content/AsyncTaskLoader.htmlサポートライブラリを使用する場合は、 'onStartLoading'をオーバーライドしないと動作しません – Blundell

+0

これで私の参照ソースサポートライブラリを使用したASyncTaskLoaderの場合:http://blog.blundell-apps.com/tut-asynctask-loader-using-support-library/ – Blundell

0

アレックスを意味し、

onLoadInBackground():実際の読み込みを実行するためにワーカースレッドで呼び出されます。実装は結果を直接渡すべきではありませんが、このメソッドから返す必要があります。結果的にdeliverResult(D)が呼び出されます。 UIスレッド。実装がUIスレッドで結果を処理する必要がある場合は、deliverResをオーバーライドすることができますult(D)とそこにそうする。

+1

いいえ、あなたがforceLoad()をしない限り呼び出されません。 – alexanderblom

1

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(); 
     } 
    } 
関連する問題