android对象申明,一行代码配置缺省页, Android最强缺省页框架, 支持代码/布局声明/视图对象回调/全局/单例配置/数据传递...
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最强缺省页框架, 支持代码/布局声明/视图对象回调/全局/单例配置/数据传递...相关推荐
- JS window对象的top、parent、opener含义介绍 以及防止网页被嵌入框架的代码
1.top 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.opener opener用于在window.open的页面引用执行该wind ...
- php yii2 service层,yii2 添加变量,Yii::$service,并像组件component那样可以添加单例配置...
在yii2中,组件是可以通过配置的方式添加到Yii::$app中的. 现在我们想添加一个Yii静态变量,$service,下面都称呼这个变量为服务, 可以通过Yii::$service访问,然后添加服 ...
- 【Creator Kit - RPG 代码分析】(1)-核心框架、单例、定时事件
Creator Kit - RPG 简介 Unity 官方的几个教程代码之一,适合入门学习. 实现了多个模块,本系列就逐步学习一下这个项目的源码. Core 核心模块,主要是实现一些框架层功能,这里主 ...
- 【EventBus】事件通信框架 ( 总结 | 手写事件通信框架完整代码示例 | 测试上述框架 )
文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 六.Activity 中测试上述框架 七.博客源码 一.消息中心 该消息中心是事件通信框架的核心代 ...
- android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例
前言 由于源码分析的代码量比较大,大部分博客网站的内容显示页面都比较窄,显示出来的效果都异常丑陋,所以您也可以直接查看 < Thinking in Android > 来阅读这边文章,希望 ...
- java单例实例对象在springboot中实例化了2次,原因竟然是热部署的锅(记一次神奇的bug)
找bug的一天 神奇的bug spring中的单例 场景 代码 产生的问题 分析 进一步分析 解决问题 参考链接 说明 神奇的bug 前言:我写的明明是单例,可是为什么初始化了二次? 今天写的这个bu ...
- 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象
为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了C ...
- ThreadLocal和单例对象比较
单例对象: 自始至终只有一个对象 当线程并发,每个线程需要自己独立的资源变量处理不同的业务时,单例对象远远不能满足需求 因此可以采用ThreadLocal模式 : 每个线程有自己独立的资源变量 ...
- 20个最强的基于浏览器的在线代码编辑器 - OPEN资讯
20个最强的基于浏览器的在线代码编辑器 - OPEN资讯 20个最强的基于浏览器的在线代码编辑器
最新文章
- ORACLE空值漫谈2
- VTK:PolyData之InterpolateMeshOnGrid
- dos启动盘访问硬盘
- 标题 计算机构自由度时主要步骤有哪些,2010年1月全国自考混凝土结构设计试题和答案...
- idea修改代码后不重启项目_使用DevTool实现SpringBoot项目热部署
- linux中until循环的特点,Bash 中的 until 循环详解
- Old ST-LINK firmware detected.do you want to upgrade it?已解决,stlink升级
- 计算机视觉实战(六)边缘检测
- 联想主板9针开关接线图_收藏丨34个电气控制接线图、电子元件工作原理图
- 海思Hi3559A GPIO操作
- RabbitMQ的两种不同写法
- MySQL NDB和InnoDB对比
- 【HTML】3.Form表单
- java设置post超时时间_HttpClient 如何设置超时时间
- 如何在图片上写字?——text in the pic
- 使用DLL封装应用程序的资源
- OpenCV 文字绘制cv::putText详解
- 赛门铁克软件恢复服务器系统,网络版赛门铁克杀软服务器重装恢复
- ng2-ace-editor 在 angular 12+ 高版本中无法经过 Ivy编译问题
- 二代身份证读写器原理及开发
热门文章
- java寻宝题目,直接带走的干货:2017新年寻宝题集
- ceac linux考试题题型,CEAC考试平面的设计题目.doc
- 使用SpaCy构建自定义 NER 模型
- 2021年A特种设备相关管理(锅炉压力容器压力管道)报名考试及A特种设备相关管理(锅炉压力容器压力管道)新版试题
- C# 实现对接钉钉回调事件(语言不重要,主要是思路)
- 【181118】VC++ 自由绘制曲线图像实例源代码
- 如何正确使用qrcode生成二维码
- Linux升级GCC:gcc-9.3.0
- 交通信号灯的控制-以三菱FX3U系列PLC为例
- BarTender_食品物料标签制作案例