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
如参数定义没有你开发中遇到的场景或者遇到问题,请提出来让他更加完善