旋转后LoaderCallbacks错过了

时间:2013-03-04 15:35:40

标签: android android-loadermanager android-support-library android-loader android-configchanges

每次使用装载机时都会遇到此问题。如果我启动AsyncTaskLoader然后旋转屏幕(无关紧要一次或多次),则不会调用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.");

1 个答案:

答案 0 :(得分:1)

不要将initLoader调用包装在if语句中。事实上,如果您希望在调用initLoader之前加载器不为null,我甚至不确定如何调用initLoader。