Android上最强大的缺省页(状态页面)工具
任何框架问题加群回复: 752854893
特点
- 全局配置
- 单例配置
- 生命周期(可以加载动画或者处理事件)
- 刷新回调
- 获取当前缺省页状态
- Loading缺省页支持进度回调
- 支持activity/fragment/view替换
- 支持Java或者XML实现
- 无网络情况下showLoading显示错误布局, 有网则显示加载中布局
- 支持配合RecyclerView的下拉刷新
- 支持配合网络请求自动化显示
- 异步线程显示缺省页
- 可以将数据作为tag传给页面回调函数处理
配合网络请求库可以做到自动处理缺省页: Net
project 的 build.gradle
allprojects {
repositories {
// ...
maven { url 'https://jitpack.io' }
}
}module 的 build.gradle
implementation 'com.github.liangjingkanji:StateLayout:1.0.11'先设置生命周期函数on**(), 再显示缺省页show**()才会执行生命周期函数
showLoading(tag:Any? = null, refresh:Boolean = true) // 参数表示是否回调onRefresh函数
showEmpty(tag:Any? = null)
showContent(tag:Any? = null)
showError(tag:Any? = null)
- showLoading重复执行不会回调onRefresh, 但是会一直回调onLoading, 可以在其回调中进行进度变更
或者也可以称为默认状态内容, 全局配置即以后都不需要在每个界面中指定缺省页显示内容, 都会默认读取全局配置. 如果不需要全局可以不写.
通过StateConfig单例对象控制
class MyApplication :Application(){
override fun onCreate() {
super.onCreate()
StateConfig.apply {
emptyLayout = R.layout.layout_empty
errorLayout = R.layout.layout_error
loadingLayout = R.layout.layout_loading
onLoading {
// do animation, this object = view object
}
}
}
}可配置项
- 缺省页布局
- 生命周期回调函数
- 重试ids
onError|onLoading|onEmpty系列函数, 每次在显示缺省页时都会执行. 一般情况是在回调中对布局中的视图进行设置动画
onRefresh函数在每次showLoading时候都会回调
onRefresh {
thread {
Thread.sleep(2000) // 模拟2s的网络请求
showContent()
}
}
showLoading()errorLayout布局中的对应ids的视图对象会在点击时自动showLoading, 全局和单例都支持设置, 设置单例后全局就不会继续作用于当前缺省页.
fun setRetryIds(@IdRes vararg ids: Int)- 这是覆盖不是添加
- 500ms内防止重复点击
级别优先于全局状态配置
state = state().apply {
emptyLayout = R.layout.layout_empty
onError {
// can retry request
}
}通过show**函数
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_loading -> state.showLoading()
R.id.menu_content -> state.showContent()
R.id.menu_error -> state.showError()
R.id.menu_empty -> state.showEmpty()
}
return true
}StateLayout其实也可以在XML布局中声明创建
<com.drake.library.StateLayout
app:empty_layout="@layout/layout_empty"
app:error_layout="@layout/layout_error"
app:loading_layout="@layout/layout_loading"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- content -->
</com.drake.library.StateLayout>在StateUtils文件中存在一系列基于Kotlin特性的工具函数, 用于快速创建一个StateLayout
fun Activity.state(): StateLayout
fun Fragment.state(): StateLayout
fun View.state(): StateLayout 此框架同时被整合到我的RecyclerView库 BRV 中, 完美配合RecyclerView的缺省页和下拉刷新上拉加载.
并且在网络请求中可以达到自动化显示和隐藏缺省页, 查看库 Net