我在使用时遇到了一些麻烦AsyncTaskLoader
,屏幕方向发生了变化。让我给你一些关于我的应用程序结构的背景信息:我有一个非常简单的应用程序,它从 url 获取结果并显示它。该应用程序由一个FragmentActivity
和三个组成Fragments
。我的三个片段如下:
- 第一个片段是一个编辑文本和一个提交输入的按钮。
- 第二个片段显示了一个加载微调器
- 当获取数据以显示结果时,第三个片段替换加载片段。
用于从AsyncTaskLoader
内容提供者(如果已缓存)或网络加载数据。
一切都很好,直到屏幕改变!我查看了的输出,LoaderManager.enableDebugLogging(true)
似乎问题的根源是LoaderCallbacks.onLoadFinished
在我的活动中没有被调用。
这是启动加载程序的一段代码:
/* This function is defined in the "first" fragment in an interface and
* implemented in the activity */
@Override
public void onFormSubmission(String word) {
showLoadingFragment();
if ( mWord == null || mWord.equals(word) ) {
getSupportLoaderManager().initLoader(0, word, this);
} else {
getSupportLoaderManager().restartLoader(0, word, this);
}
// Store the word
mWord = word;
}
显示结果的代码:
@Override
public void onLoadFinished(Loader<Bundle> loader, Bundle data) {
// Validation and other stuff
ResultFragment fragment = new ResultFragment();
// Add the fragment to the 'result_fragment_container' FrameLayout
getSupportFragmentManager()
.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
// Replace loading fragment with the result
.replace(R.id.result_fragment_container, fragment)
.commitAllowingStateLoss();
}
我尝试但失败的方法:
- 设置
setRetaininstance(true)
在片段中。 android:configChanges="orientation|keyboardHidden|keyboard"
在清单中设置。
我没有想法,所以任何帮助将不胜感激。