当我在导航抽屉中的不同片段之间切换时,我试图将状态保存在导航抽屉片段上。例如:我从片段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()
我不知道片段生命周期中是否有任何可以保存其状态的点。任何帮助,将不胜感激。感谢。
答案 0 :(得分:0)
当你从一个片段切换到另一个片段时,你不应该松散片段的状态,你应该做的事情是#34; new Fragment()"只有一次,并将实例保存在全局变量中。
但这不会解决旋转问题。 对于旋转问题,你应该读这个=> http://blog.sqisland.com/2014/06/navigationdrawer-creates-fragment-twice.html 不容易,但我还没有找到另一种方式。
答案 1 :(得分:0)
在类中将片段对象定义为静态,在newInstance方法中,只初始化片段为空,否则只返回片段。
这将解决您的问题。
但是对于方向更改,您必须使用saveinstancestate方法。