# 情感图状态
# DslAdapterStatusItem
情感图状态控制Item
.
情感图
, 就是在数据
还没有完全获取到时, 界面上显示的一些状态.
如下图:
加载中 | 空布局 | 加载失败 |
---|---|---|
以上效果, 是库的默认实现.
注意:
所有默认效果, 完全可自定义, 并且是高度自由控制.
部分实现源码如下:
open class DslAdapterStatusItem : BaseDslStateItem() {
init {
itemStateLayoutMap[ADAPTER_STATUS_LOADING] = R.layout.base_loading_layout
itemStateLayoutMap[ADAPTER_STATUS_ERROR] = R.layout.base_error_layout
itemStateLayoutMap[ADAPTER_STATUS_EMPTY] = R.layout.base_empty_layout
itemState = ADAPTER_STATUS_NONE
}
companion object {
/**正常状态, 切换到内容*/
const val ADAPTER_STATUS_NONE = -1
/**空数据*/
const val ADAPTER_STATUS_EMPTY = 0
/**加载中*/
const val ADAPTER_STATUS_LOADING = 1
/**错误*/
const val ADAPTER_STATUS_ERROR = 2
}
}
# 简单自定义
只需要给指定状态的itemStateLayoutMap
设置自定义的布局就行.
itemStateLayoutMap[ADAPTER_STATUS_LOADING] = R.layout.base_loading_layout
用您的布局id
, 覆盖库中的默认id
即可.
也可以用同名的布局xml文件
, 覆盖Library
中的同名xml文件
.
# 高级自定义
创建一个自定义的DslAdapterStatusItem
赋值给dslAdapterStatusItem
即可. 如下:
dslAdapter.dslAdapterStatusItem = 自定义的Item
继承DslAdapterStatusItem
,重写onItemBind
方法, 可以完全覆盖基类
的所有实现逻辑.
如果只是想控制不同状态下布局数据, 那么可以重写_onBindStateLayout
方法.
override fun _onBindStateLayout(itemHolder: DslViewHolder, state: Int) {
super._onBindStateLayout(itemHolder, state)
if (itemState == ADAPTER_STATUS_ERROR) {
//出现错误后, 触击刷新
itemHolder.clickItem {
if (itemState == ADAPTER_STATUS_ERROR) {
_notifyRefresh(itemHolder)
itemDslAdapter?.setAdapterStatus(ADAPTER_STATUS_LOADING)
}
}
itemHolder.click(R.id.base_retry_button) {
itemHolder.clickView(itemHolder.itemView)
}
} else if (itemState == ADAPTER_STATUS_LOADING) {
_notifyRefresh(itemHolder)
} else {
itemHolder.itemView.isClickable = false
}
}
# 情感图切换
默认
是没有情感图状态, 可以通过以下方法切换状态
.
dslAdapter.setAdapterStatus(state)
可选的值:
open class DslAdapterStatusItem : BaseDslStateItem() {
companion object {
/**正常状态, 切换到内容*/
const val ADAPTER_STATUS_NONE = -1
/**空数据*/
const val ADAPTER_STATUS_EMPTY = 0
/**加载中*/
const val ADAPTER_STATUS_LOADING = 1
/**错误*/
const val ADAPTER_STATUS_ERROR = 2
}
}
# 刷新回调
使用onRefresh
属性, 设置回调处理方法.
dslAdapter.dslAdapterStatusItem.onRefresh = {
//刷新
}