/Loader

Primary LanguageKotlin

Loader

更改自 LoadSir

由于使用LoadSir中存在以下问题:

  1. 布局总会多一层LoadLayout嵌套。
  2. 注册之后马上更改Callback失效。

优化

Loader使用targetViewlayoutParams,将LoadingError等状态页面直接显示到targetView位置,并处理ConstraintLayout布局问题。

Demo

APK下载

使用

目前测试阶段.... 慎用

LoadSir使用基本一样

  1. 添加依赖
dependencies {
      implementation 'com.github.Theoneee:Loader:0.0.3-beta'
}
  1. 定义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

}
  1. 配置
Loader.beginBuilder()
            .addCallback(LoadingCallback::class.java)
            .addCallback(ErrorCallback::class.java)
            .defaultCallback(SuccessCallback::class.java)
            .commit()
  1. 添加几个设置的扩展方法
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)
            }
        }
    }

}
  1. 调用
  val mLoader = Loader.getDefault().register(registerView)

  mLoader.run {
      showLoadingPage("加载中")
      delay(2000) {
          showErrorPage("当前无网络,请检查网络状态") {
              showLoadingPage("再次加载中")
              delay(1000) {
                  showSuccessPage()
              }
          }
      }

  }

具体使用参考Demo