繁体   English   中英

保存导航抽屉片段的状态

[英]Save the state of navigation drawer fragments

我试图在导航抽屉片段中保存状态,因为我在导航抽屉内的不同片段之间切换。 例如:我从片段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()”,并将实例保留在全局变量中。

但这不会解决旋转问题。 对于旋转问题,你应该阅读这个=> http://blog.sqisland.com/2014/06/navigationdrawer-creates-fragment-twice.html不容易,但我还没有找到另一种方法。

在类和newInstance方法中将片段对象定义为静态,只有初始化片段为空,否则只返回片段。

这将解决您的问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM