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. 谷歌的硬件梦:Pixel手机、ChromeOS平板和Home音箱
  2. 学python需要什么基础知识-学习Python需要知道哪些基础入门知识?
  3. SQL Server 索引重建或索引重組
  4. esp32 Flash分区
  5. struts升级2.3.12到2.5.13
  6. 使用Redis set 解决数据的唯一性问题
  7. [渝粤教育] 中国地质大学 自动控制原理 复习题 (2)
  8. python爬虫爬商品库存_利用Python爬虫爬取指定天猫店铺全店商品信息
  9. Django操作原生MySQL的方法:MyModel.objects.raw()执行查询语句
  10. 我的conky 配置(拆分版)
  11. 【sping揭秘】18、使用spring访问数据
  12. lua定义一个简单的类
  13. C# List与Array性能比较
  14. Info.plist信息
  15. 算法设计与分析基础_学习笔记
  16. 主流web前端技术框架有哪些?
  17. 电脑所有的文件打开很慢
  18. FPGA 20个例程篇:9.DDR3内存颗粒初始化写入并通过RS232读取(下)
  19. IOT漏洞挖掘学习笔记(一)——堆基础及相关数据结构
  20. Mesh(802.11s)组网 — 基于OpenWRT路由器

热门文章

  1. iFunk,定义新基准
  2. 上海交通大学继续教育学院(网络教育)上课时间表
  3. javascript的数据类型的简单介绍
  4. 如何调用cmd.exe程序,并可以传递一些命令行参数
  5. 用html写出分子分母,具有相等分子和分母的分数的HTML特殊字符
  6. 太原科技大学计算机是一本吗,太原科技大学是几本?录取原则是什么?
  7. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之自然语言处理技术
  8. codeforce_exercise_r23
  9. android按比例增加坐标图片,Android:为超大图增加一个导航图
  10. 【图像处理】——距离变换算法