随后进行了大量的搜索和谷歌搜索,当用户导航到另一个片段然后使用后退片段返回上一个片段时,我尝试了各种方法来使onsaveState正常工作。
我有两个片段A和B,它们被加载并用于容器xml布局中,该布局由普通的Activity包含。一个单一的活动。
这是我如何将片段添加到片段管理器和我的容器xml
中FragmentA about = new FragmentA();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.mainViewContainer, about).addToBackStack(TAG_ABOUT_PAGE);
ft.commit();
这是FragmentA上的onsaveState
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//save something
outState.putParcelable(KEY_CENTER_POINT, mlatLong);
Log.d("jjj", "onsaveInsanceState");
}
片段B像这样被调用
FragmentB fragmentB = new FragmentB();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.mainViewContainer, fragmentB).addToBackStack(TAG_ABOUT_PAGE);
ft.commit();
当用户按下后退键时,片段A的整个生命周期被调用,onAttach,oncreate,oncreateView等,片段显示但未保存的值,因为当片段被fragmentB替换时,它没有调用onsaveInstanceState。 / p>
任何想法?
我可以硬编码并创建一个表示我希望存储的值的单例,只是从oncreateView加载它,但这不是理想的,是最后的手段。
由于