目前我在开发新的android项目。 在我的项目中,我有2个FrameLayout(称为F1,F2),用于Fragment的容器。
在“F1”上我会添加一些片段(如导航抽屉片段,菜单项......)。
在“F2”上我调用了它的MainContainer - 它将使用容器所有“Main”片段。 (我的意思是F2将容器片段像HomeFragment,GameFragment ......)。
以下是一些步骤:
F1 -> add fragment f1;
F1 -> add fragment f2;
F2 -> add fragment g1;
F2 -> add fragment g2;
F1 -> add fragment f3;
现在我想在Container F2上使用事务片段。 我的意思是: 我可以在Container F2上添加/删除片段。但在android片段管理器中将管理所有片段f1..f3,g1..g2; 所以你给我打了popBackStack - >它将删除片段f3。 (但我想删除g2)。
像addFragment,remove,replace fragment这样的任务我只想在容器F2中做片段。 (F1永远不会改变。)
请帮忙!
答案 0 :(得分:0)
添加片段时,您可以使用addToBackStack(String name)
和disallowAddToBackStack()
来控制FragmentManager
的后筹码。
根据您的要求,您应该使用这样的代码来添加f1,f2和f3:
getFragmentManager().beginTransaction()
.add(R.id.F1, [your fragment instance])
.disallowAddToBackStack()
.commit();
使用以下代码添加g1和g2:
getFragmentManager().beginTransaction()
.add(R.id.F2, [your fragment instance])
.addToBackStack(null)
.commit();
查看addToBackStack(String name)
和disallowAddToBackStack()
的法律文件,了解更多详情。
答案 1 :(得分:0)
在将子片段添加到该片段时,您应该使用子片段。
public void addFragB() {
FragmentManager childFragMan = getChildFragmentManager();
FragmentTransaction childFragTrans = childFragMan.beginTransaction();
FragmentClassB fragB = new FragmentClassB();
childFragTrans.add(R.id.fragA_LinearLayout, fragB);
childFragTrans.addToBackStack("B");
childFragTrans.commit();
}
删除片段时
public void backPressed() {
int childCount = parentFragment.getChildFragmentManager().getBackStackEntryCount();
if (childCount == 0) {
// it has no child Fragment
} else {
// get the child Fragment
FragmentManager childFragmentManager = parentFragment.getChildFragmentManager();
// removing the child Fragment from stack
childFragmentManager.popBackStackImmediate();
}
}