我有一个活动托管2个片段,我不使用viewpager。我的方式如下。当我从Fragment1移动到Fragment2时,我看到Fragment1的onSaveInstanceState
被调用。但是,当我从Fragment2移回Fragment1时,使用savedInstanceState调用onCreate()
和onCreateView()
作为null。
我已在setRetainState(true)
个片段中尝试onCreate()
。我错过了什么?感谢。
P.S:SO有一个标记重复Saving Fragment's state after replacing Fragment的问题,但原始问题不再存在。
switch (event.option) {
case 1:
getSupportActionBar().show();
if (frag1 == null)
frag1 = new Fragment1();
fragmentManager.beginTransaction().replace(R.id.v4_main_content, frag1).commit();
break;
case 2:
getSupportActionBar().hide();
if (frag2 == null)
frag2 = new Fragment2();
fragmentManager.beginTransaction().replace(R.id.v4_main_content, frag2).commit();
break;
}
更新:代码中所需的代码,Fragment1()中的函数
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save near location
outState.putParcelable(KEY_NEAR_LOCATION, mNearLocation);
outState.putLong(KEY_SELECTED_TIME_IN_MILLIS, mSelectedTimeInMillis);
}
答案 0 :(得分:9)
我知道我迟到有回应,但也许这会帮助其他人寻找这个问题的答案。当您有一个包含多个片段的活动时,不会调用片段中的onDestroy。只要活动没有被破坏,这个片段的结果就不会被破坏。但是,当你替换fragment2并将它添加到backstack时,你会回到fragment1,在fragment2中将调用方法onDestroyView。因此,要保存fragment2的状态,您需要在onDestroyView中执行此操作,例如:
Bundle savedState;
public onCreateView(...){
..........
if(savedState != null){
String hello = savedState.getString("hello");
}
..........
}
@Override
public void onDestroyView(){
super.onDestroyView();
savedState.putString("hello", "Say hello");
}
这就是全部。我希望它会有所帮助。