0

ローダーを使用するたびにこの問題が発生します。起動AsyncTaskLoaderしてから画面を回転させても(1回でも数回でも構いません)onLoaderFinished()呼び出されません。loadInBackground()作業を終了しますがonLoaderFinished()、呼び出されません。コールバックが欠落しているように見えますが、アクティビティでは次のようになりますonCreate()

LoaderManager lm = getSupportLoaderManager();
if (lm.getLoader(LOADER_FLIGHTS) != null) {
    lm.initLoader(LOADER_FLIGHTS, null, mFlightsLoaderCallbacks);
}

コールバックがアクティビティまたはフィールドによって実装されているかどうかは関係ありません。私の場合、フィールドを使用します。

LoaderCallbacks<SearchResult> mFlightsLoaderCallbacks = new LoaderCallbacks<SearchResult>() {

時々それはかなりうまくいくが、いくつかのデバイスでは私は再びこの問題を抱えている。

Androidのバグトラッカーで検索しましたが、何も役に立ちませんでした。

これは私の間違いですか、どうすれば修正できますか?

編集:

private Handler mHandler = new Handler();

@Override
public void onLoadFinished(Loader<SearchResult> loader, SearchResult res) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            dismissProgress(R.string.dlg_wait_flights);
        }
    });
    mResult = res;
    Helper.Log.d(TAG, "Loader.onLoadFinished.");
4

1 に答える 1

1

initLoader呼び出しをifステートメントでラップしないでください。実際、initLoaderを呼び出す前にローダーがヌルにならないことを期待している場合、initLoaderがどのように呼び出されるかさえわかりません。

于 2013-03-04T15:54:43.563 に答える