【问题标题】:How to change fragments within activity and save state如何更改活动中的片段并保存状态
【发布时间】:2015-08-30 18:55:22
【问题描述】:

我有一个活动将使用以下方法动态添加片段。

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 的字段。

按下退栈时我无法保存状态。似乎没有保存这些字段。

执行此操作的正确方法是什么?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    Fragment 的 onSaveInstanceState(Bundle outState) 永远不会被调用,除非 Fragment 的 Activity 对其自身和附加的 Fragment 调用它。因此,在某些事情(通常是旋转)强制活动到 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】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        How do I restore a previously displayed Fragment?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-27
          • 2021-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多