【问题标题】:Save the state of navigation drawer fragments保存导航抽屉片段的状态
【发布时间】:2014-04-14 00:42:55
【问题描述】:

当我在导航抽屉内的不同片段之间切换时,我正在尝试保存导航抽屉片段的状态。例如:我从 Fragment A 开始触发一些事件,然后切换到 Fragment B。然后当我从 Fragment B 切换回 Fragment A 时,我想看到 Fragment 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()

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

【问题讨论】:

  • 不是每次都创建一个新的片段,而是只创建一个片段,重用片段A,B,C..等的相同实例,也许还可以在片段上结合setRetainInstance(true)。

标签: android android-fragments savestate


【解决方案1】:

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

但这并不能解决旋转问题。 对于旋转问题,您应该阅读此 => http://blog.sqisland.com/2014/06/navigationdrawer-creates-fragment-twice.html 不容易,但我还没有找到其他方法。

【讨论】:

    【解决方案2】:

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

    这将解决您的问题。

    但是为了改变方向,你必须使用 saveinstancestate 方法。

    【讨论】:

    • 使用静态字段是一种不好的做法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    相关资源
    最近更新 更多