清空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结果截图如下:

最后一步是调用:

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了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值