Fragment更简单的调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shallcheek/article/details/78793906

Fragments [ Github]

前言

日常Fragmnet场景很多,很多应用都是采用全Fragment开发 Activity只当作承载作用。
平时开发中调用Fragment 是这样:

getSupportFragmentManager().beginTransaction().replace(id,xxxFragment,"tag").commit();

如果需要传递参数的话写法就是这样:

  Fragment xxxFragment=new Fragment();
  Bundle bundle=new Bundle();
  bundle.putXXX();
  xxxFragment.setArguments(bundle);
  getSupportFragmentManager().beginTransaction().replace(id,xxxFragment,"tag").commit();

要是实现一个跳转可以点击返回键实现返回 需要getSupportFragmentManager().beginTransaction().addToBackStack
如果屏幕旋转或者其它异常情况又需要单独的去处理,当应用的场景越多这样重复的代码就会是重复劳动得不偿失

实现

采用Builder模式 配置参数 调用方式类似Gilde Picaso 一样传入基本参数然后进行调用
基本的调用

    Fragments.with(this)
             .fragment(Fragment1.class)
             .into(R.id.test);  

传入的Fragment

  • Fragment的Class 通过反射生成对应的Fragmen对象Fragment.instantiate(context,
    fClass.getName(), bundle)
  • 实例化好的Fragment对象

FragmentManager也分为两种情况

  • 传入FragmentActivity调用的是getSupportFragmentManager()
  • 传入Fragment则调用fragment.getChildFragmentManager()

Fragment的缓存
对应的方法为Fragment.Builder().single(); 默认的就打开如果Activity已经加载过且没有被remove,会在再次调用的时候在FragmentManager中读取出缓存的Fragment对象。这样也会避免屏幕旋转以及其它异常中重新实例化一个Fragmen对象并加载 。关闭缓存默认不设置tag 如果开启removeOld则会被remove
Ps.在实际使用中Gilde加载图片会生成一个隐藏的Fragment使用需要注意 不然Fragmen切换图片就会被销毁

传值
传值定义了所有日常用到的基本类型 如果没有你需要的传值则传入Bundle对象。传入实例化的Fragment的getArguments也会默认添加进所有Bundle集合不需要做多余的处理

加载
最后的调用有into(R.id.test)get() into是直接调用显示到对应的viewGroup id 对象
,get() 调用是获取生成的Fragment对象 。两个方法都返回了fragment生成的对象

引用方式

     implementation 'com.chaek.android:fragments:1.0.0'

NOTE

如参数定义没有你开发中遇到的场景或者遇到问题,请提出来让他更加完善

猜你喜欢

转载自blog.csdn.net/shallcheek/article/details/78793906