- 第一个片段是edittext和提交输入的按钮。
- 第二个片段显示加载旋转器。
- 第三个片段替换加载片段,以显示数据结果。
一切都很顺利,直到屏幕方向发生改变!我查看了LoaderManager.enableDebugLogging(true)的输出,似乎问题的根源在于onLoadFinished回调没有在我的活动中被调用。
以下是启动loader的代码片段:
/* 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"
。
我已经没有更多的想法了,所以任何帮助将不胜感激。
onLoadFinished()
方法内提交FragmentTransaction
,这会影响用户体验。请参考我的博客文章了解更多信息。 - Alex Lockwood