Android按容器删除片段

时间:2015-03-18 04:34:29

标签: android android-fragments

目前我在开发新的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永远不会改变。)

请帮忙!

2 个答案:

答案 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();     
        }
    }