根据文档,loadInitial
是在UI线程中创建PagedList的过程中调用的,以提供一些占位符,直到获取真实数据为止,以避免向用户显示空列表。
有什么方法可以跳过loadInitial
或返回空列表?
如果我使用默认配置返回空列表,则不会调用loadAfter
。
我查看了几种实现,但是所有人都只是复制他们的代码以从loadInitial
和loadAfter
中的Internet加载数据,在我看来这并不是一个很好的解决方案。
最佳答案
在您的loadInitial
方法中,只需设置重试操作
setRetry(Action { loadInitial(params, callback) })
override fun loadInitial(params: LoadInitialParams<String>, callback: LoadInitialCallback<String, Lab>) {
setRetry(Action { loadInitial(params, callback) })
// Set network state if you want
networkState.postValue(Response(Response.ViewState.ERROR, null, Throwable("")))
initialLoad.postValue(Response(Response.ViewState.ERROR, null, Throwable("")))
}
setRetry
方法private var retryCompletable: Completable? = null
private fun setRetry(action: Action?) {
if (action == null) {
this.retryCompletable = null
} else {
this.retryCompletable = Completable.fromAction(action)
}
}
当您要呼叫
loadAfter
时,必须invalidate
sourceFactory
。fun refresh() = sourceFactory.dataSource.value.invalidate()