Loader
更改自 LoadSir
由于使用LoadSir中存在以下问题:
- 布局总会多一层
LoadLayout
嵌套。 - 注册之后马上更改Callback失效。
优化
Loader
使用targetView
的layoutParams
,将Loading
,Error
等状态页面直接显示到targetView
位置,并处理ConstraintLayout
布局问题。
Demo
使用
目前测试阶段.... 慎用
和LoadSir
使用基本一样
- 添加依赖
dependencies {
implementation 'com.github.Theoneee:Loader:0.0.3-beta'
}
- 定义Callback
class LoadingCallback: Callback() {
override fun layoutId(): Int = R.layout.loader_loading_layout
}
class ErrorCallback: Callback() {
override fun layoutId(): Int = R.layout.loader_error_layout
}
- 配置
Loader.beginBuilder()
.addCallback(LoadingCallback::class.java)
.addCallback(ErrorCallback::class.java)
.defaultCallback(SuccessCallback::class.java)
.commit()
- 添加几个设置的扩展方法
fun LoaderView.showLoadingPage(msg: String? = null) {
showCallbackView(LoadingCallback::class.java){ _, view ->
msg?.let {
view?.findViewById<TextView>(R.id.loading_tips)?.text = it
}
}
}
fun LoaderView.showErrorPage(
msg: String?,
imageRes: Int = R.mipmap.status_loading_view_loading_fail,
click: ((View) -> Unit)? = null
) {
showCallbackView(ErrorCallback::class.java){ _, view ->
view?.run {
msg?.let {
findViewById<TextView>(R.id.stateContentTextView).text = it
}
val ivStatus = findViewById<ImageView>(R.id.stateImageView)
ivStatus.setImageResource(imageRes)
click?.let {
setOnClickListener(it)
}
}
}
}
- 调用
val mLoader = Loader.getDefault().register(registerView)
mLoader.run {
showLoadingPage("加载中")
delay(2000) {
showErrorPage("当前无网络,请检查网络状态") {
showLoadingPage("再次加载中")
delay(1000) {
showSuccessPage()
}
}
}
}
具体使用参考Demo