StateLayout

Android上最强大的缺省页(状态页面)工具

特点

全局配置

单例配置

生命周期(可以加载动画或者处理事件)

刷新回调

获取当前缺省页状态

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

重试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布局中声明创建

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">

扩展

在StateUtils文件中存在一系列基于Kotlin特性的工具函数, 用于快速创建一个StateLayout

fun Activity.state(): StateLayout

fun Fragment.state(): StateLayout

fun View.state(): StateLayout

此框架同时被整合到我的RecyclerView库 BRV 中, 完美配合RecyclerView的缺省页和下拉刷新上拉加载.

并且在网络请求中可以达到自动化显示和隐藏缺省页, 查看库 Net

android对象申明,一行代码配置缺省页, Android最强缺省页框架, 支持代码/布局声明/视图对象回调/全局/单例配置/数据传递...相关推荐

  1. JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码

    1.top 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.opener opener用于在window.open的页面引用执行该wind ...

  2. php yii2 service层,yii2 添加变量,Yii::$service,并像组件component那样可以添加单例配置...

    在yii2中,组件是可以通过配置的方式添加到Yii::$app中的. 现在我们想添加一个Yii静态变量,$service,下面都称呼这个变量为服务, 可以通过Yii::$service访问,然后添加服 ...

  3. 【Creator Kit - RPG 代码分析】(1)-核心框架、单例、定时事件

    Creator Kit - RPG 简介 Unity 官方的几个教程代码之一,适合入门学习. 实现了多个模块,本系列就逐步学习一下这个项目的源码. Core 核心模块,主要是实现一些框架层功能,这里主 ...

  4. 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )

    文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 六.Activity 中测试上述框架 七.博客源码 一.消息中心 该消息中心是事件通信框架的核心代 ...

  5. android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例

    前言 由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 < Thinking in Android > 来阅读这边文章,希望 ...

  6. java单例实例对象在springboot中实例化了2次,原因竟然是热部署的锅(记一次神奇的bug)

    找bug的一天 神奇的bug spring中的单例 场景 代码 产生的问题 分析 进一步分析 解决问题 参考链接 说明 神奇的bug 前言:我写的明明是单例,可是为什么初始化了二次? 今天写的这个bu ...

  7. 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

    为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了C ...

  8. ThreadLocal和单例对象比较

    单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量     ...

  9. 20个最强的基于浏览器的在线代码编辑器 - OPEN资讯

    20个最强的基于浏览器的在线代码编辑器 - OPEN资讯 20个最强的基于浏览器的在线代码编辑器

最新文章

  1. ORACLE空值漫谈2
  2. VTK:PolyData之InterpolateMeshOnGrid
  3. dos启动盘访问硬盘
  4. 标题 计算机构自由度时主要步骤有哪些,2010年1月全国自考混凝土结构设计试题和答案...
  5. idea修改代码后不重启项目_使用DevTool实现SpringBoot项目热部署
  6. linux中until循环的特点,Bash 中的 until 循环详解
  7. Old ST-LINK firmware detected.do you want to upgrade it?已解决,stlink升级
  8. 计算机视觉实战(六)边缘检测
  9. 联想主板9针开关接线图_收藏丨34个电气控制接线图、电子元件工作原理图
  10. 海思Hi3559A GPIO操作
  11. RabbitMQ的两种不同写法
  12. MySQL NDB和InnoDB对比
  13. 【HTML】3.Form表单
  14. java设置post超时时间_HttpClient 如何设置超时时间
  15. 如何在图片上写字?——text in the pic
  16. 使用DLL封装应用程序的资源
  17. OpenCV 文字绘制cv::putText详解
  18. 赛门铁克软件恢复服务器系统,网络版赛门铁克杀软服务器重装恢复
  19. ng2-ace-editor 在 angular 12+ 高版本中无法经过 Ivy编译问题
  20. 二代身份证读写器原理及开发

热门文章

  1. java寻宝题目,直接带走的干货:2017新年寻宝题集
  2. ceac linux考试题题型,CEAC考试平面的设计题目.doc
  3. 使用SpaCy构建自定义 NER 模型
  4. 2021年A特种设备相关管理(锅炉压力容器压力管道)报名考试及A特种设备相关管理(锅炉压力容器压力管道)新版试题
  5. C# 实现对接钉钉回调事件(语言不重要,主要是思路)
  6. 【181118】VC++ 自由绘制曲线图像实例源代码
  7. 如何正确使用qrcode生成二维码
  8. Linux升级GCC:gcc-9.3.0
  9. 交通信号灯的控制-以三菱FX3U系列PLC为例
  10. BarTender_食品物料标签制作案例