Fragment回退栈管理

背景介绍

平板项目中使用Fragment做页面,而且还要用Fragment做次级页面的跳转,点击返回按钮,可以返回上一个页面。次级页面下钻层级不确定,但是界面相同,也就是说Fragment可以被复用

解决思路

  1. 使用回退栈管理
  2. 控制FragmentManager的show()和hide()方法来实现

回退栈

**childFragment.java**
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
 //添加到回退栈
ft.addToBackStack("null");

**在MainActivity.java**
    /**
     * 手动回退
     */
    public void popBackStack(){
        if (fragmentManager.getBackStackEntryCount()>0){
            fragmentManager.popBackStack();
        }else {
            finish();
        }
    }

    @Override
    public void onBackPressed() {
//        super.onBackPressed();屏蔽掉系统的返回事件
        popBackStack();
    }
Fragement 逐层创建

Activity.java(Activity页面添加Fragment1)
注意这里使用的是replace方法

FragmentTransaction ft = fragmentManager.beginTransaction();
                        ft.replace(R.id.frame_content, StatisticFragment.newInstance(sTiem,eTime),"1");//这是第一个Fragment
                        ft.commit();

Fragment1.java(第一级Fragment,添加Fragment2.class)
注意这里使用的是add方法

 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.add(R.id.frame_content, SubStatisticFragment.newInstance(subParamsBundle("2",dqbh,bjqf),3),2+"");
        ft.hide(getActivity().getSupportFragmentManager().findFragmentByTag(1+""));
        ft.addToBackStack(null);//统计回退栈
        ft.commit();

Fragment2.java(第二级Fragment页面,添加Fragment3.class)
这里也是用的add

   FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        paramsBundle.putString("bjqf",bjqf);
        ft.add(R.id.frame_content, SSubStatisticFragment.newInstance(paramsBundle,tag+1),tag+"");
        ft.addToBackStack("null");//统计回退栈
        ft.hide(getActivity().getSupportFragmentManager().findFragmentByTag(tag-1+""));
        ft.commit();

说明

  1. 为什么第一个fragment在添加的时候用的是replace而不是add?
    防止回退到首页的时候显示Activity的空的FrameLayout

  2. 为什么在Fragment中创建Fragment的时候用add而不是Replace?
    因为使用replace方法添加新的Fragment在回退的时候Fragment会重新加载

  3. 为什么要调用hide方法
    隐藏上一个Fragment防止页面重叠
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值