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)
的大佬,等你来撩.