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
Другие вопросы по тегам