保存导航抽屉片段的状态

4
我试图在导航抽屉的各个片段之间切换时保存状态。例如:我从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()

我不知道在片段生命周期的什么阶段可以保存其状态。任何帮助都将不胜感激。谢谢。


不要每次都创建新的片段,只需创建一个实例,重复使用相同的FragmentA、B、C等实例。可以结合在片段上设置setRetainInstance(true)。 - cYrixmorten
2个回答

0

在类中将片段对象定义为静态的,并且在newInstance方法中,只有在初始化片段为空时才会初始化,否则只需返回片段。

这将解决您的问题。

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


2
使用静态字段是一种不好的编程习惯! - Sufian

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接