Библиотека подкачки: пропустите loadInitial в PageKeyedDataSource - PullRequest
0 голосов
/ 29 ноября 2018

В соответствии с документацией loadInitial вызывается при создании PagedList в потоке пользовательского интерфейса, чтобы предоставить некоторые заполнители, пока не будут получены реальные данные, чтобы избежать показа пользователю пустого списка.

Есть ли способ пропустить loadInitial иливернуть пустой список?

Если я верну пустой список с настройками по умолчанию, loadAfter не будет вызываться.Я посмотрел несколько реализаций, но все люди просто дублируют свой код для загрузки данных из Интернета в loadInitial и loadAfter, что, на мой взгляд, не очень хорошее решение.

1 Ответ

0 голосов
/ 29 ноября 2018

В вашем методе 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 the sourceFactory.

fun refresh() = sourceFactory.dataSource.value.invalidate()
...