Библиотека подкачки: пропустить loadInitial в PageKeyedDataSource

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

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

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


person anber    schedule 29.11.2018    source источник


Ответы (1)


В вашем методе 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()
person Prithvi Bhola    schedule 29.11.2018
comment
@anber, не могли бы вы рассказать мне о проблеме, с которой вы столкнулись с этим решением, потому что я пробовал это, и оно работает для меня. - person Prithvi Bhola; 29.11.2018
comment
метод loadAfter не вызывается и у меня пустой список - person anber; 29.11.2018
comment
@anber ты invalidate() datasource? Пожалуйста, проверьте мой отредактированный ответ. - person Prithvi Bhola; 29.11.2018
comment
Да делал, но не помогает. Я создал минимальный образец для воспроизведения: github.com/akadatsky/pagingDemo - person anber; 29.11.2018