Android 还原旋转背景片段的instanceState

Android 还原旋转背景片段的instanceState,android,android-fragments,screen-rotation,Android,Android Fragments,Screen Rotation,我有一个框架布局的活动。 首先,我加载Fragment1,如果用户现在在操作栏中按“下一步”,我将Fragment1替换为Fragment2。(由ActivityPresenter完成) 如果现在在Fragment2加载的情况下旋转屏幕,则调用Fragment1的“SaveInstanceState”,调用Fragment2,并重新创建Fragment2但不是碎片1当我将片段1中的所有信息向后旋转时,这些信息都会丢失 保存片段的活动: 公共类Activity1扩展ActivityBase{ 私有

我有一个框架布局的活动。 首先,我加载
Fragment1
,如果用户现在在操作栏中按“下一步”,我将
Fragment1
替换为
Fragment2
。(由ActivityPresenter完成)

如果现在在Fragment2加载的情况下旋转屏幕,则调用
Fragment1
的“SaveInstanceState”,调用
Fragment2
,并重新创建
Fragment2
但不是碎片1当我将
片段1
中的所有信息向后旋转时,这些信息都会丢失

保存片段的活动:

公共类Activity1扩展ActivityBase{
私有静态最终字符串标记=Activity1.class.getSimpleName();
私人IActivityPresenter mActivityPresenter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quote);
如果(savedInstanceState!=null){
LogHelper.info(标记“onCreate-->已还原”);
mActivityPresenter=(IActivityPresenter)savedInstanceState.getSerializable(“presenter”);
}否则{
LogHelper.info(标记“onCreate-->New”);
mActivityPresenter=新的ActivityPresenter(此);
}
}
@凌驾
SaveInstanceState上的公共无效(Bundle savedInstanceState){
LogHelper.info(标记“onSaveInstanceState”);
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putSerializable(“presenter”,mActivityPresenter);
}
@凌驾
公共void loadFragment1(){
FragmentTransaction ft=getFragmentManager().beginTransaction();
Fragment1 Fragment1=新的Fragment1();
ft.replace(R.id.frameLayoutContent,fragment1);
ft.setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN);
ft.commit();
}
@凌驾
公共void loadFragment2(){
FragmentTransaction ft=getFragmentManager().beginTransaction();
Fragment2 Fragment2=新的Fragment2();
ft.replace(R.id.frameLayoutContent,fragment2);
ft.setTransition(FragmentTransaction.transition\u FRAGMENT\u OPEN);
ft.addToBackStack(“碎片2”);
ft.commit();
}
片段1/2:

公共类Fragment1扩展了Fragment{
私有静态最终字符串标记=Fragment1.class.getSimpleName();
私人IPresenter1 mPresenter1;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.fragment\u quote\u basics,container,false);
如果(savedInstanceState!=null){
LogHelper.info(标记“onCreate-->已还原”);
MPPresenter1=(IPPresenter1)SavedInstanceState.getSerializable(“presenter”);
}否则{
LogHelper.info(标记“onCreate-->New”);
mPresenter1=新的演示者1(此);
}
返回rootView;
}
@凌驾
SaveInstanceState上的公共无效(Bundle savedInstanceState){
LogHelper.info(标记“onSaveInstanceState”);
super.onSaveInstanceState(savedInstanceState);
if(savedInstanceState.getSerializable(“presenter”)==null){
savedInstanceState.putSerializable(“presenter”,MPPresenter1);
}
}
MyFragment2看起来和Fragment1一样

日志:

12-01 10:22:24.096 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ onCreate-->新建
12-01 10:22:24.176 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ onCreate-->新建
[按下“下一步”按钮]
12-01 10:22:31.293 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ onCreate-->新建
[第一次旋转屏幕]
12-01 10:22:35.508 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ onSaveInstanceState
12-01 10:22:35.518 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ onSaveInstanceState
12-01 10:22:35.518 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ onSaveInstanceState
12-01 10:22:35.518 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ 销毁
12-01 10:22:35.518 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ 销毁
12-01 10:22:35.518 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ 销毁
12-01 10:22:35.588 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ onCreate-->已恢复
12-01 10:22:35.598 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ onCreate-->已恢复
[第二次旋转屏幕]
12-01 10:22:38.231 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ onSaveInstanceState
12-01 10:22:38.241 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ onSaveInstanceState
12-01 10:22:38.241 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ onSaveInstanceState
12-01 10:22:38.241 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ 销毁
12-01 10:22:38.241 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ 销毁
12-01 10:22:38.241 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ 销毁
12-01 10:22:38.281 26226-26226/at.itpro.mobile.android.lightning I/Activity﹕ onCreate-->已恢复
12-01 10:22:38.291 26226-26226/at.itpro.mobile.android.lightning I/Fragment2﹕ onCreate-->已恢复
[按后退]
12-01 10:28:31.107 26226-26226/at.itpro.mobile.android.lightning I/Fragment1﹕ onCreate-->已恢复
由于第一次旋转后不会创建
Fragment1
,因此当屏幕第二次旋转时,
mPresenter1
为空。因此
saveInstanceState
保存空值。当按下back(日志的最后一行)后创建/恢复
Fragment1
时,演示者为空

编辑/问题2: 我想得越多,它就越没有意义,
Fragment1
被销毁(在第二次屏幕旋转时),尽管它已经被销毁/替换了