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. Не работает только адаптер состояния загрузки. Я выполнил и клонировал это, и он отлично работает. В чем может быть проблема с моим?


person ronnieotieno    schedule 26.08.2020    source источник
comment
Нашли ли вы какие-либо решения для этого?   -  person Jim Ovejera    schedule 26.03.2021


Ответы (1)


Попробуйте переопределить следующий метод в 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, он по умолчанию выдает адаптеру только состояния загрузки Loading и Error, что означает, что адаптер не будет знать, завершен ли процесс загрузки.

Итак, в вашем случае следующий код всегда приводит к тому, что progress.visibility будет VISIBLE. Поскольку вы можете получить только состояние LoadState.Loading в своем onBindViewHolder.

//loadState is always LoadState.Loading
if (loadState is LoadState.Loading) progress.visibility =
            View.VISIBLE; txtErrorMessage.visibility = View.GONE
person Zijian Wang    schedule 02.12.2020
comment
loadState is LoadState.Loading неверно. loadState.mediator?.refresh is LoadState.Loading было бы правильно. - person Chingiz; 20.05.2021