我对此感到头疼。管理碎片状态
的场景是以下内容:
我有与承载4个片段A的FrameLayout一个活动。
我不介意重新创建每个片段,除了其中一个。
有一个我需要保持不变。
这里是我的导航方案:
我想保留,而不是重建的片段是破片一。
在我的活动我有用于管理该片段此方法:
protected final static int FRAG_A=0;
protected final static int FRAG_B=1;
protected final static int FRAG_C=2;
protected final static int FRAG_D=3;
protected void displayNewFragment(int newFragment)
{
Fragment fragment=null;
String tag=null;
switch(newFragment)
{
case FRAG_A:
tag=FragA.TAG;
fragment=new FragA();
break;
case FRAG_B:
tag=FragB.TAG;
fragment=new FragB();
break;
case FRAG_C:
tag=FragC.TAG;
fragment=new FragC();
break;
case FRAG_D:
tag=FragD.TAG;
fragment=new FragD();
break;
}
if(fragment!=null)
manager.beginTransaction().replace(R.id.main_container, fragment, tag).commit();
else
Log.e(getClass().getSimpleName(), "Error creating content (null).");
}
此方法由片段时,我想切换到另一种叫,作为parent
的参考活性(主):
parent.displayNewFragment(Main.FRAG_A) // Or FRAG_B, C, D, etc
我知道,我重新创建每个实例在方法和以前被破坏(如我所说的片段交易replace
这个工程除了要问什么,我完美:
如何防止破坏FragA并保持其状态?
预先感谢您。
首先,谢谢你的回答。但这不是解决方案。除非绝对必要,否则我不想将该片段添加到BackStack。我最终在Activity中设置了一个引用FragA的全局变量,而不是在'displayNewFragment'方法中重新实例化它。然后在片段中,我重新使用'onCreateView'中的根视图,而不是每次重新创建。我几乎可以肯定,这不是最好的解决方案,但现在它的工作。我会继续尝试其他方法。干杯。 – Alberto 2014-10-20 11:08:52