根据文档,loadInitial是在UI线程中创建PagedList的过程中调用的,以提供一些占位符,直到获取真实数据为止,以避免向用户显示空列表。

有什么方法可以跳过loadInitial或返回空列表?

如果我使用默认配置返回空列表,则不会调用loadAfter
我查看了几种实现,但是所有人都只是复制他们的代码以从loadInitialloadAfter中的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()

09-11 06:15