Android Fragment - saveFragmentInstanceState()和setInitialSavedState()在活动之间不起作用

时间:2015-08-02 14:03:56

标签: android android-fragments

我有一个包含微调器的片段,我需要在两个活动中重复使用该片段,以便微调器的选择状态持续存在。

我已使用this SO answer中的建议以下列方式实施saveFragmentInstanceState()setInitialSavedState()

  1. 在活动A上,用户选择一个微调项目
  2. 在活动A的spinnerFragment 上调用
  3. saveFragmentInstanceState()
  4. 然后启动活动B
  5. 在活动B的spinnerFragment 上调用
  6. setInitialSavedState()
  7. 活动B 显示与之前相同的选定微调器值...
  8. ...但是这不会发生,因为在活动B中,不会记住所选的微调器值。

    我的代码如下。任何人都可以看到问题可能是什么?或者我没有使用正确的方法?

    SpinnerFragment - 选择微调项目时执行的代码...

    Intent activityBIntent = new Intent(getActivity(), ActivityB.class);
    android.app.FragmentManager fm = getActivity().getFragmentManager();
    SavedState spinnerFragmentState = fm.saveFragmentInstanceState(SpinnerFragment.this);
    activityBIntent.putExtra(ActivityB.FRAGMENT_STATE_KEY, spinnerFragmentState);
    startActivity(activityBIntent);
    

    活动B - 在onCreate()...

    中执行的代码
        setContentView(R.layout.activity_b);
    
        /*
         * Create fragmentContainer
         */
        SpinnerFragment spinnerFragment = new SpinnerFragment();
        SavedState spinnerFragmentState = getIntent().getParcelableExtra(FRAGMENT_STATE_KEY);
        Log.d(LOG_TAG, "spinnerFragmentState: " + spinnerFragmentState); //this isn't null
        spinnerFragment.setInitialSavedState(spinnerFragmentState);
    
        /*
         * Add spinnerFragmentContainer to layout
         */
        android.app.FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.spinnerFragmentContainer, spinnerFragment);
        fragmentTransaction.commit();
    

    PS - 与这个问题不同,我在这个主题上发现的其他问题/答案并不是指不同活动之间持久的片段状态。

0 个答案:

没有答案