0

我每次使用loader都有这个问题。如果我开始我的AsyncTaskLoader然后旋转屏幕(不重要一次或多次)onLoaderFinished()不会被调用。 loadInBackground()完成其工作,但onLoaderFinished()未被调用。它看起来像回调错过,但在活动onCreate()我:LoaderCallbacks旋转后错过

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."); 
+0

您的活动_is_处理程序,或有一个处理程序对象?你确定它没有执行,或者你只是看不到结果? – 2013-03-04 15:41:21

+0

@ClassStacker请看看更新的代码 – rocknow 2013-03-04 15:55:26

+0

关于你的编辑,这意味着你没有看到日志消息? – 2013-03-04 15:58:10

回答

1

不要在if语句包装你initLoader电话。事实上,我甚至都不知道如何在您调用initLoader之前期望loader不为null的情况下如何调用initLoader。

+0

如果我这样做,我的装载机将立即开始。如果我不想要这个,该怎么办? – rocknow 2013-03-04 16:02:07

+0

好的,所以你说你在你的问题中没有包含其他地方的initLoader。你用setRetainInstance(true)保留你的片段吗? – 2013-03-04 16:04:07

+0

这里我没有使用片段 – rocknow 2013-03-04 16:04:30