阅读背景:

Actvity 管理Fragment 的退栈与回栈

来源:互联网 

我把代码放上来 解释我全部 都有备注, 电调用此方法可以实现回栈的功能。

 //此方法 简单解释
    public void changeFragment(int containerId, Class<? extends BaseFragment> fragmentclass, Bundle bundle, boolean isReplace, boolean isBook) {
        //获取Fragment管理
        FragmentManager supportFragmentManager = getSupportFragmentManager();
        //获取到开启事务
        FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
        //通过反射过来的参数fragmentclass获取它的名字
        String simpleName = fragmentclass.getSimpleName();
        //利用名字在回退栈中进行查找此Frragment 返回的是一个Fragment但有可能是空的也就是没有的意思
        BaseFragment fragmentByTag = (BaseFragment) supportFragmentManager.findFragmentByTag(simpleName);
        //进行if判断 当我的Fragment等于NULL 的时候的情况进行if中的操作
        if (fragmentByTag == null) {
            try {
                //由于是通过反射拿到的Fragment的类所以目前没有实体的Fragment
                //但是没关系我们可以让Anroid的虚拟机进行创建也就是说咋们赋值以后虚拟机进行咋们给好的Fragment进行实例化
                //也就是动态实例化
                fragmentByTag = fragmentclass.newInstance();
                //调用事务的添加功能因为我们加了if判断当Fragment空的时候才会进来既然进来了也就是说
                //回退栈中并没有此Frahment 那么就进行添加
                // 第一个参数是 我们容器的ID , 二    我们要添加的Fragment  三,   添加Fragment的name
                fragmentTransaction.add(containerId, fragmentByTag, simpleName);
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        //判断Bundel 是否携带参数过来的 当不为Null的时候就是携带了参数
        if (bundle != null) {
            //此方法定义在我们的BaseFragment中  利用 BaseFragemnt中的方法进行 传递参数
            fragmentByTag.setBundle(bundle);
        }
        //此方法是判断我们的栈顶Fragment的隐藏  如果不为NULL才能隐藏为NULL隐藏会抛异常
        if (lastFragment != null) {
            //事务 的隐藏方法
            fragmentTransaction.hide(lastFragment);
        }
        //判断是否替换的boolean 类型的值 如果是true 那就进行替换 不为true 那就显示
        if (isReplace) {
            fragmentTransaction.replace(containerId, fragmentByTag, simpleName);
        } else {

            fragmentTransaction.show(fragmentByTag);
        }

//判断是否 退栈
        if (isBook) {
            fragmentTransaction.addToBackStack(simpleName);

            lastFragment = fragmentByTag;
        }

        fragmentTransaction.commit();
    } 



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: