Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 保存导航抽屉片段的状态_Android_Android Fragments_Savestate - Fatal编程技术网

Android 保存导航抽屉片段的状态

Android 保存导航抽屉片段的状态,android,android-fragments,savestate,Android,Android Fragments,Savestate,在导航抽屉中的不同片段之间切换时,我试图保存导航抽屉片段上的状态。例如:我从片段A开始触发一些事件,然后切换到片段B。然后我想在从片段B切换回片段A时看到片段A的相同状态 我尝试使用onSavedInstanceState(Bundle savedInstanceState),但它只有在片段生命周期中方向发生变化时才会被调用。每当我切换到一个新片段时,就会创建一个新片段,我不知道如何从片段中保存数据并在另一次访问时重新加载它 我也不想使用backstack(),因为它会删除我要还原的片段之前的所

在导航抽屉中的不同片段之间切换时,我试图保存导航抽屉片段上的状态。例如:我从片段A开始触发一些事件,然后切换到片段B。然后我想在从片段B切换回片段A时看到片段A的相同状态

我尝试使用onSavedInstanceState(Bundle savedInstanceState),但它只有在片段生命周期中方向发生变化时才会被调用。每当我切换到一个新片段时,就会创建一个新片段,我不知道如何从片段中保存数据并在另一次访问时重新加载它

我也不想使用backstack(),因为它会删除我要还原的片段之前的所有片段

下面是我如何调用抽屉开关上的片段

private void selectItem(int position) {

    Fragment fragment;
    String TAG;

    switch (position) {
    case 0:
        fragment = new FragmntA();
        TAG = "A";
        break;
    case 1:
        fragment = new FragmentB();
        TAG = "B";
        break;
    case 2:
        fragment = new FragmentC();
        TAG = "C";
        break;
    case 3:
        fragment = new FragmentD();
        TAG = "D";
        break;
    case 4:
        fragment = new FragmentE();
        TAG = "E";
        break;
    default:
        fragment = new FragmentA();
        TAG = "A";
    }

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.content_frame, fragment, TAG);
    ft.commit()

我不知道片段生命周期中是否有任何一点可以保存它的状态。任何帮助都将不胜感激。谢谢。

要在从一个片段切换到另一个片段时不丢失片段的状态,您应该只执行一次“new Fragment()”,并将实例保留在全局变量中

但这并不能解决旋转问题。 对于旋转问题,您应该阅读此=>
不容易,但我还没有找到另一种方法。

在类中将fragment对象定义为静态,在newInstance方法中,只有initialise is fragment为null,否则只返回片段

这会解决你的问题


但对于方向更改,您必须在saveinstancestate方法上使用。

不是每次创建一个新片段,而是每次只创建一个片段,重用片段a、B、C的相同实例。。等等。可能还与片段上的setRetainInstance(true)结合使用。使用静态字段是一种不好的做法!