Skip to content

Android最强缺省页框架, 一行代码配置缺省页, 支持代码/布局声明/视图对象传递/全局单例配置/异常数据统一处理

Notifications You must be signed in to change notification settings

devsheng/StateLayout

 
 

Repository files navigation

StateLayout

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)
  1. 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()

重试Ids

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

About

Android最强缺省页框架, 一行代码配置缺省页, 支持代码/布局声明/视图对象传递/全局单例配置/异常数据统一处理

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 93.3%
  • Java 6.7%