我对此感到头痛。
方案如下:
我有一个带有FrameLayout的Activity,它包含4个片段 我不介意每次重新创建碎片除了一个 有一个我需要保持不变。
这是我的导航方案:
我想要保留但不重新创建的片段是Frag A 。
在我的Activity中,我有这种方法来管理片段:
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
对活动的引用(Main):
parent.displayNewFragment(Main.FRAG_A) // Or FRAG_B, C, D, etc
我知道我正在重新创建该方法中的每个实例,而前一个实例被销毁(因为我在片段事务中调用了replace
。除了我要求的内容之外,这种方法很完美:
如何防止破坏FragA并保持其状态?
提前谢谢。
答案 0 :(得分:1)
请使用 addToBackStack 来防止破坏片段并保持其状态如下所示: -
if(fragment!=null)
manager.beginTransaction().replace(R.id.main_container, fragment, tag).addToBackStack("spartacus").commit();
else
Log.e(getClass().getSimpleName(), "Error creating content (null).");
干杯...! 请告诉我它是否适合您:)
答案 1 :(得分:0)
要管理活动中的片段,您需要使用 FragmentManager。要获得它,请从您的调用getFragmentManager() 活性。
您可以使用FragmentManager执行的一些操作包括:
使用findFragmentById()获取活动中存在的片段(对于在活动布局中提供UI的片段)或 findFragmentByTag()(用于提供或不提供UI的片段)。
使用popBackStack()(用户模拟Back命令)从后台堆栈中弹出片段。