Android Paging 3 не показывает адаптер Loadstate
Я следовал руководству по добавлению адаптера Loadstate к адаптеру Recyclerview на Android Paging 3, но в настоящее время он не отображается. Вот как я обновляю адаптер.
lifecycleScope.launch {
viewModel.searchProducts(searchParam, channelId, categoryId)
.collectLatest {
binding.allProductRecyclerView.isVisible = true
adapter.submitData(it)
}
Вот как я добавляю адаптер LoadState
binding.allProductRecyclerView.adapter = adapter.withLoadStateFooter(
footer = ProductLoadingStateAdapter()
)
Это суть LoadStateAdapter, а также макет активности и элемент состояния загрузки.
Адаптер работает нормально, я также могу получить состояние нагрузки, добавив LoadStateListener. Не работает только адаптер состояния загрузки. Я следил за этим и клонировал это, и он отлично работает. В чем может быть проблема с моим?
0 ответов
Попробуйте переопределить следующий метод в вашем ProductLoadingStateAdapter следующим образом:
class ProductLoadingStateAdapter: LoadStateAdapter<XXX>() {
override fun onBindViewholder...
override fun onCreateViewHolder...
override fun displayLoadStateAsItem(loadState: LoadState): Boolean {
return loadState is LoadState.Loading || loadState is LoadState.Error || LoadState.NotLoading
}
}
Если вы посмотрите на исходный код LoadStateAdapter, он по умолчанию передает адаптеру только состояния загрузки "Загрузка" и "Ошибка", что означает, что адаптер не узнает, завершился ли процесс загрузки.
Итак, в вашем случае следующий код всегда будет
progress.visibility
быть
VISIBLE
. Потому что ты можешь получить только
LoadState.Loading
состояние в вашем
onBindViewHolder
.
//loadState is always LoadState.Loading
if (loadState is LoadState.Loading) progress.visibility =
View.VISIBLE; txtErrorMessage.visibility = View.GONE