android,保留并恢复更换后的Fragment状态

Tax*_*Noi 5 android android-fragments

我有一个托管2个片段的活动,我不使用viewpager.我的方式如下.当我从Fragment1移动到Fragment2时,我看到 onSaveInstanceStateFragment1被调用.但是,当我从Fragment2移回Fragment1时,onCreate()onCreateView()使用savedInstanceState作为null调用.我已经尝试setRetainState(true)onCreate()碎片了.我错过了什么?谢谢.

PS:SO有一个问题,在更换片段后标记重复保存片段的状态,但原始问题不再存在.

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; 
}
Run Code Online (Sandbox Code Playgroud)

更新:注释中所需的代码,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);


    }
Run Code Online (Sandbox Code Playgroud)

Sky*_*kye 11

我知道我迟到有回应,但也许这会帮助其他人寻找这个问题的答案.当您有一个包含多个片段的活动时,不会调用片段中的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");
}
Run Code Online (Sandbox Code Playgroud)

就这样.我希望它会有所帮助.