分页库:跳过PageKeyedDataSource中的loadInitial

时间:2018-11-29 09:24:11

标签: android android-architecture-components android-jetpack android-paging

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

是否可以跳过loadInitial或返回空列表?

如果我使用默认配置loadAfter返回空列表,则不会调用。 我查看了几种实现,但是所有人都只是复制他们的代码以从loadInitialloadAfter中从Internet加载数据,在我看来这并不是一个很好的解决方案。

1 个答案:

答案 0 :(得分:0)

在您的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()