В этом случае я не хочу очищать адаптер и показывать его пустым или заполнителями, пока данные загружается.
Я хочу показать предыдущие данные и просто обновить их с помощью разницы после получения новых данных.
Но теперь, когда я выполняю 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)
}
Я понимаю, что упоминание примера выше не будет работать, поскольку после его отправки источник данных передает обновления в тот же экземпляр списка, и он полностью инкапсулируется.
/>
Кроме того, я не влияю на сам набор данных.
Я пытался использовать PagedList.Callback, он позволяет узнать, когда список обновляется.
Но опять же, шансов как-то повлиять на поведение обновления нет.
При использовании обычного адаптера я бы просто не устанавливал и не обновлял его элементы до тех пор, пока не будут получены новые данные.
Я хочу добиться чего-то подобного здесь.>
Подробнее здесь: https://stackoverflow.com/questions/563 ... aceholders