每次使用装载机时都会遇到此问题。如果我启动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.");
答案 0 :(得分:1)
不要将initLoader调用包装在if语句中。事实上,如果您希望在调用initLoader之前加载器不为null,我甚至不确定如何调用initLoader。