Skip to content

AndroidX Fragment懒加载实现方案, 以及Fragment懒加载操作库

License

Notifications You must be signed in to change notification settings

angcyo/DslFragment

Repository files navigation

DslFragment

AndroidX中, Fragment懒加载实现方案,原理就是使用setMaxLifecycle控制Fragment的生命周期, 以及Fragment管理操作助手类DslFHelper.

使用DslFHelper操作Fragment能保证onResumeonPause方法成对出现, 并且是对用户可见时才触发onResume, 对用户不可见时触发onPause.

ViewPager中, 请使用BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT创建FragmentStatePagerAdapter或者FragmentPagerAdapter亦可达到相同效果.

使用说明

完全可以单独只是用dslFHelper操作助手, 那么懒加载的处理请在原生的onResumeonPause回调方法中进行.

如果继承库中AbsLifecycleFragment类, 那么懒加载的处理请在onFragmentShowonFragmentHide回调方法中进行.

如果使用原生或者第三方的Fragment时, 请实现IFragment接口, 这样在使用dslFHelper时能保证功能的正常进行.

ActivityFragment中均可以直接使用扩展方法dslFHelper.

Fragment中有dslChildFHelper扩展方法.

注意:Fragment容器的id请使用R.id.fragment_container, 否则在操作DslFHelper需要指定containerViewId变量

显示Fragment

在无特殊说明的情况下, 均支持批量操作Fragment, 比如可以同时显示多个Fragment和移除多个Fragment.

dslFHelper {
    show(TestFragment2::class.java)
}

dslFHelper {
    show(TestFragment2())
}

dslFHelper {
    //优先从缓存池中获取目标Fragment
    restore(TestFragment2::class.java) 
}

移除Fragment

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)即可.

关于返回按键的处理

1.

Activity可以直接继承库中BaseAppCompatActivity即可.

2.

或者在ActivityonBackPressed方法中, 加入以下代码:

dslFHelper {
    if (back()) {
        //finish activity
    }
}

实现了IFragment接口的Fragment, 会在back()处理的时候, 收到onBackPressed回调, 可以通过返回false拦截此次back操作.

Fragment内可以使用back扩展方法, 进行回退操作.

参数的传递, 均使用原生默认的arguments = Bundle()方式.

使用JitPack的方式, 引入库.

根目录中的 build.gradle

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

APP目录中的 build.gradle

dependencies {
    implementation 'com.github.angcyo:DslFragment:1.0.1'
}

群内有各(pian)种(ni)各(jin)样(qun)的大佬,等你来撩.

联系作者

点此QQ对话 该死的空格 点此快速加群

开源地址

About

AndroidX Fragment懒加载实现方案, 以及Fragment懒加载操作库

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages