如何更改活动中的片段并保存状态

时间:2015-08-30 18:55:22

标签: android android-fragments

我的活动会使用以下方法动态添加片段。

FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
FragmentA fragmentA = new FragmentA();
transaction.add(R.id.fragment_container, fragmentA, "fragmentA");
    transaction.addToBackStack("fragmentA");
    transaction.commit();

FragmentA有一个TextView。我的活动上有一个导航抽屉,想要在片段之间切换(例如FragmentA,FragmentB和FragmentC),具体取决于导航抽屉中单击的项目。如何在更改为另一个片段时保存片段的状态。我已实施onSavedInstance(Bundle outState)onActivityCreated(Bundle savedInstanceState),但savedInstanceState始终为空。我希望能够在从FragmentB更改然后从FragmentB更改回FragmentA时保存FragmentA的字段。

按下靠背时,我无法保存状态。看起来这些字段没有被保存。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

您可以使用SharePrefrences在FragmentA中保存数据,并在再次调用时读取它。另外一个优点是,如果需要,可以在其他片段中读取保存在SharePreferences中的数据。

碎片上的有用链接;
  - https://developer.android.com/training/basics/fragments/index.html

- http://www.vogella.com/tutorials/AndroidFragments/article.html

答案 1 :(得分:0)

片段的onSaveInstanceState(Bundle outState)将永远不会被调用,除非片段的活动将其自身和附加片段调用。因此,这种方法不会被调用,直到某些东西(通常是旋转)强制活动到SaveInstanceState并稍后恢复它。

所以在createView上你可以做类似的事情 。 。

Bundle mySavedInstanceState = getArguments();
 String value = mySavedInstanceState.getString(KEY);

在onPause()方法中保存值

@Override
    public void onPause() {
        super.onPause();
        String value = //get value from view;

        getArguments().putString(KEY, value);
    } 

答案 2 :(得分:0)

我找到了一种快速方法来维护下面链接中每个片段的状态。

How do I restore a previously displayed Fragment?

我没有意识到FragmentTransaction有一个隐藏当前片段视图的hide()方法和一个show()方法来再次显示它。