PagedListAdapter перезагружает данные без заполнителейAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 PagedListAdapter перезагружает данные без заполнителей

Сообщение Anonymous »

Я использую PagedListAdapter, и мне приходится перезагрузить данные при возобновлении экрана.

В этом случае я не хочу очищать адаптер и показывать его пустым или заполнителями, пока данные загружается.

Я хочу показать предыдущие данные и просто обновить их с помощью разницы после получения новых данных.

Но теперь, когда я выполняю dataSource.invalidate()< /code> он немедленно отправляет пустой список, что приводит к очистке адаптера и отображению заполнителей.

Теперь мой код выглядит так:

Код: Выделить всё

class PortfolioListDataSource(
private val viewModel: PortfolioViewModel,
private val tabType: PortfolioTabType
) : PageKeyedDataSource() {

override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback) {
val offset = 0
viewModel.loadInvestments(tabType, offset, Consumer {
val nextKey = if (it.data.size < params.requestedLoadSize) null else it.data.size
callback.onResult(it.data, offset, it.total, null, nextKey)
})
}

override fun loadAfter(params: LoadParams, callback: LoadCallback) {
val offset = params.key
viewModel.loadInvestments(tabType, offset, Consumer {
val nextKey = offset + it.data.size
callback.onResult(it.data, nextKey)
})
}

override fun loadBefore(params: LoadParams, callback: LoadCallback) {

}

class Factory(
val viewModel: PortfolioViewModel,
private val tabType: PortfolioTabType
) : DataSource.Factory() {

val sourceLiveData = MutableLiveData
()

override fun create() = PortfolioListDataSource(viewModel, tabType)
.also { sourceLiveData.postValue(it) }
}
}
Здесь я инициализирую

Код: Выделить всё

val pagedListConfig = PagedList.Config.Builder()
.setInitialLoadSizeHint(20)
.setPageSize(20)
.build()

ordersLiveData = LivePagedListBuilder(factory, pagedListConfig).build()
Здесь я заполняю адаптер

Код: Выделить всё

viewModel.ordersLiveData.observe(this, Observer {
adapter.submitList(it)
})
И обновляем его с помощью

Код: Выделить всё

// TODO Here I want to fetch new data, but not invalidate current dataset while it is loading
factory.sourceLiveData.value?.invalidate()
Как оставить предыдущие данные и обновить их, когда будут готовы новые данные?

Обновить :

Я хочу что-то вроде:

Код: Выделить всё

if (!refreshing) {
submitList(it)
}
Я имею в виду не отправлять пустой набор данных в адаптер при вызове dataSource.invalidate().

Я понимаю, что упоминание примера выше не будет работать, поскольку после его отправки источник данных передает обновления в тот же экземпляр списка, и он полностью инкапсулируется.
/>
Кроме того, я не влияю на сам набор данных.

Я пытался использовать PagedList.Callback, он позволяет узнать, когда список обновляется.
Но опять же, шансов как-то повлиять на поведение обновления нет.

При использовании обычного адаптера я бы просто не устанавливал и не обновлял его элементы до тех пор, пока не будут получены новые данные.
Я хочу добиться чего-то подобного здесь.>

Подробнее здесь: https://stackoverflow.com/questions/563 ... aceholders
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обновление PagedListAdapter после первоначальной загрузки для отображения последних сетевых данных.
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как удалить элемент из PagedListAdapter в компоненте подкачки Android
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Flask перезагружает только определенный шаблон, а не всю страницу
    Гость » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Гость
  • Flask render_template не перезагружает сайт с новыми переменными – я неправильно думаю?
    Гость » » в форуме Python
    0 Ответы
    37 Просмотры
    Последнее сообщение Гость
  • Gunicorn не перезагружает работника
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»