package com.xw.common.base import androidx.lifecycle.LifecycleOwner import com.scwang.smart.refresh.layout.SmartRefreshLayout import com.scwang.smart.refresh.layout.constant.RefreshState class RefreshLiveData : SingleLiveEvent() { fun done() { postValue(ListState.DONE) } fun error(message: String? = null) { postValue(ListState.ERROR) } fun first() { postValue(ListState.FIRST_PAGE) } fun other() { postValue(ListState.OTHER_PAGE) } fun loading() { postValue(ListState.LOADING) } fun refresh() { postValue(ListState.REFRESH) } } fun RefreshLiveData.fastObserve(owner: LifecycleOwner, refreshLayout: SmartRefreshLayout, block: ((ListState) -> Unit)? = null) { this.observe(owner) { it?.let { block?.invoke(it) when (it) { ListState.DONE -> { refreshLayout.setEnableLoadMore(false) refreshLayout.finishRefresh() refreshLayout.finishLoadMore() } ListState.FIRST_PAGE -> { refreshLayout.finishRefresh() refreshLayout.setEnableLoadMore(true) } ListState.OTHER_PAGE -> { refreshLayout.finishLoadMore() } ListState.REFRESH -> { if (!refreshLayout.isRefreshing) { refreshLayout.RefreshKernelImpl().setState(RefreshState.Refreshing) } } ListState.ERROR -> { refreshLayout.finishRefresh() refreshLayout.finishLoadMore() } else -> {} } } } } enum class ListState { DONE, ERROR, FIRST_PAGE, OTHER_PAGE, LOADING, REFRESH }