我有一个托管2个 fragment 的 Activity ,并且我不使用viewpager。我的方法如下。当我从Fragment1移到Fragment2时,我看到Fragment1的onSaveInstanceState被调用了。但是,当我从Fragment2移回Fragment1时,调用了onCreate()onCreateView(),而saveInstanceState为null。
我已经在 fragment 的setRetainState(true)中尝试过onCreate()了。我想念什么?谢谢。

附注:因此,有一个问题被标记为重复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);


    }

最佳答案

我知道我迟到了,但也许会帮助其他人寻找这个问题的答案。当您有一个包含多个 fragment 的 Activity 时,不会调用 fragment 中的onDestroy。只要不破坏 Activity ,就不会破坏该 fragment 的结果。但是,当您替换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");
}

就这样。希望对您有所帮助。

关于android,替换后保留并恢复Fragment状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29116128/

10-13 04:36