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

Android 如何在活动中更改片段并保存状态,android,android-fragments,Android,Android Fragments,我有一个活动,可以使用下面的方法动态添加片段 FragmentTransaction transaction=getSupportFragmentManager().beginTransaction(); FragmentA fragmentA = new FragmentA(); transaction.add(R.id.fragment_container, fragmentA, "fragmentA"); transaction.addToBackStack("fragmentA"

我有一个活动,可以使用下面的方法动态添加片段

FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
FragmentA fragmentA = new FragmentA();
transaction.add(R.id.fragment_container, fragmentA, "fragmentA");
    transaction.addToBackStack("fragmentA");
    transaction.commit();
FragmentA有一个文本视图。我的活动上有一个导航抽屉,我想根据在导航抽屉中单击的项目在片段(例如FragmentA、FragmentB和FragmentC)之间切换。当更改为另一个片段时,如何保存片段的状态。我已经在SavedInstance(Bundle outState)上实现了
onSavedInstance
onActivityCreated(Bundle savedInstanceState)
savedInstanceState
始终为空。我希望在从FragmentB更改,然后从FragmentB更改回FragmentA时,能够保存FragmentA的字段

按下后退按钮时无法保存状态。看起来这些字段没有被保存


正确的方法是什么

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

关于片段的有用链接
-


-

除非片段的活动对其自身和附加片段进行调用,否则永远不会调用片段的onSaveInstanceState(Bundle outState)。因此,只有在某些东西(通常是旋转)强制活动SaveInstanceState并在以后还原它时,才会调用此方法

所以在createView中,您可以执行类似的操作 . .

在onPause()方法中保存值


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

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

Bundle mySavedInstanceState = getArguments();
 String value = mySavedInstanceState.getString(KEY);
@Override
    public void onPause() {
        super.onPause();
        String value = //get value from view;

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