-
-
Notifications
You must be signed in to change notification settings - Fork 59
情感图状态切换
angcyo edited this page Jul 7, 2020
·
7 revisions
情感图状态控制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
}
}
dslAdapter.dslAdapterStatusItem.onBindStateLayout = {itemHolder: DslViewHolder, state: Int->
//state:对应的状态
//itemHolder:可以操作视图
}
当情感图
状态从其他状态(非ADAPTER_STATUS_LOADING
状态)切换至ADAPTER_STATUS_LOADING
状态时, 触发的回调.
使用onRefresh
属性, 设置回调处理方法.
dslAdapter.dslAdapterStatusItem.onRefresh = {
//刷新, 这里可以处理一些界面刷新, 数据刷新, 请求列表第一页的数据等
//类似于下拉刷新控件的回调
}