清空Fragment回退栈中某个Fragment之上的所有Fragment

经二次测试有效:转:清空Fragment回退栈中某个Fragment之上的所有Fragment

之前设置了addbackStack(null)

连续点击了6次fragment,保存了6个回退栈,然后点击返回,直接清空所有栈并且onDetach掉回到上一个fragment; 

结果:这里打印的getName为null,所以下面的设置参数1:就直接设置null了

com.demo.moviedemo E/Fragment Two-vvv: ++++++++++++Fragment回退栈数量:6
com.demo.moviedemo E/Fragment Two-vvv: null

这是我点击返回时候执行:

 mBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               //查看栈的清空,看最底下的栈的Name
                int num = getActivity().getFragmentManager().getBackStackEntryCount();
                String numString = "++++++++++++++++Fragment回退栈数量:"+num;
                Log.e("Fragment Two-vvv", numString);
                for (int i = 0; i < num; i++) {
                    android.app.FragmentManager.BackStackEntry f = getActivity().getFragmentManager().getBackStackEntryAt(i);
                    Log.e("Fragment Two-vvv", f.getName()+"");
                }
                //清空回退栈的重要一步 根据Name来清空上层的栈
                getActivity().getFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                onDetach();
            }
        });

以下是详细流程:

根据debug信息查看Fragment回退栈的情况,具体debug代码如下:

int num = getActivity().getSupportFragmentManager().getBackStackEntryCount();
String numString = "++++++++++++++++++++++++++++++++++Fragment回退栈数量:"+num;
TALogger.d("Fragment", numString);
for (int i = 0; i < num; i++) {
    BackStackEntry backstatck = getActivity().getSupportFragmentManager().getBackStackEntryAt(i);
    TALogger.d("Fragment", backstatck.getName());
}

debug结果截图如下:

清空Fragment回退栈中某个Fragment之上的所有Fragment_第1张图片

最后一步是调用:

getActivity().getSupportFragmentManager().popBackStackImmediate(CreateGroupNameFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);

即弹出Tag为CreateGroupNameFragment之上的所有(包括自身)的Fragment。

popBackStackImmediate(name,flag);

第一个参数:是最底下fragment的名称,一般是类名

具体情况根据打印出来的名字决定,有时候为getName为nul,name就填null

第二个参数:只能是 0 或者 1(POP_BACK_STACK_INCLUSIVE);

第一个参数为null时,第二个参数为0时:

会弹出回退栈中最上层的那一个fragment。

因为经测试,回退栈中的fragment个数减少了一个。

第二个参数为1时:

会弹出所有回退栈中的fragment。

因为经测试,回退栈中的fragment个数变为0了。

你可能感兴趣的:(清空Fragment回退栈中某个Fragment之上的所有Fragment)