AndroidX中, Fragment懒加载实现方案,原理就是使用setMaxLifecycle控制Fragment的生命周期, 以及Fragment管理操作助手类DslFHelper.
使用DslFHelper操作Fragment能保证onResume和onPause方法成对出现, 并且是对用户可见时才触发onResume, 对用户不可见时触发onPause.
在ViewPager中, 请使用BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT创建FragmentStatePagerAdapter或者FragmentPagerAdapter亦可达到相同效果.
完全可以单独只是用dslFHelper操作助手, 那么懒加载的处理请在原生的onResume和onPause回调方法中进行.
如果继承库中AbsLifecycleFragment类, 那么懒加载的处理请在onFragmentShow和onFragmentHide回调方法中进行.
如果使用原生或者第三方的Fragment时, 请实现IFragment接口, 这样在使用dslFHelper时能保证功能的正常进行.
在Activity和Fragment中均可以直接使用扩展方法dslFHelper.
在Fragment中有dslChildFHelper扩展方法.
注意:
Fragment容器的id请使用R.id.fragment_container, 否则在操作DslFHelper需要指定containerViewId变量
在无特殊说明的情况下, 均支持批量操作Fragment, 比如可以同时显示多个Fragment和移除多个Fragment.
dslFHelper {
show(TestFragment2::class.java)
}
dslFHelper {
show(TestFragment2())
}
dslFHelper {
//优先从缓存池中获取目标Fragment
restore(TestFragment2::class.java)
}
dslFHelper {
//移除指定的fragment
remove(this@TestFragment2)
}
dslFHelper {
//保留tag对应的fragment, 其他全部移除
keep(MainFragment::class.java)
}
dslFHelper {
//移除全部在FragmentManager中的fragment
removeAll()
}可以通过一下变量配置动画,支持补间动画和属性动画:
@AnimatorRes
@AnimRes
var showEnterAnimRes: Int
@AnimatorRes
@AnimRes
var showExitAnimRes: Int
@AnimatorRes
@AnimRes
var removeEnterAnimRes: Int
@AnimatorRes
@AnimRes
var removeExitAnimRes: Int补间动画不需要额外的处理, 即可达到效果.
如果是属性动画, 并且需要100%宽度, 100%高度这样的数据, 就需要额外的处理方式了.
如果是继承AbsLifecycleFragment, 则不需要额外处理.
如果不是继承的AbsLifecycleFragment, 那么只需要在Fragment中的onCreateAnimator返回return FragmentAnimator.loadAnimator(context, nextAnim)即可.
Activity可以直接继承库中BaseAppCompatActivity即可.
或者在Activity的onBackPressed方法中, 加入以下代码:
dslFHelper {
if (back()) {
//finish activity
}
}
实现了IFragment接口的Fragment, 会在back()处理的时候, 收到onBackPressed回调, 可以通过返回false拦截此次back操作.
在Fragment内可以使用back扩展方法, 进行回退操作.
参数的传递, 均使用原生默认的
arguments = Bundle()方式.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}dependencies {
implementation 'com.github.angcyo:DslFragment:1.0.1'
}群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.



