Вид ресайклера эпоксидной смолы без надувания макета

Я использую Epoxy Recycler View с Databinding. Проблема в том, что на экране не раздувается макет. Я проверил, что список не пуст и цикл работает правильно. Код, который я использую, приведен ниже:

            binding.updatesEpoxyRecycler.withModels {
                postsList.forEachIndexed() { pos, it ->
                    updates {
                        postContent(it)
                        onPostClick { view ->
                            when (view?.id) {
                                R.id.layout_recycler_updates_share -> {
                                    sharePost(pos)
                                }
                                R.id.layout_recycler_updates_file_download -> {
                                    context?.showShortToast("File download clicked on pos = $pos")
                                }
                                R.id.layout_recycler_updates_bookmark -> {
                                    Timber.d("posts active observer in on click of button = ${viewModel.posts.hasActiveObservers()}")
                                    handleBookmarkClick(postsList[pos])
                                }
                            }
                        }
                    }
                }
            }

Я попытался разобраться в проблеме, но не смог ее найти.

1 ответ

Решение

В коде есть две проблемы:

  • Вы просто звоните своему update модель, но не вернув ее.
  • При использовании Epoxy нам нужно установить идентификатор, потому что Epoxy предоставляет DiffUtilпрямо из коробки, поэтому нам нужно предоставить идентификатор для каждого элемента. Вы можете использовать позицию или что-то еще, если у вас есть, но убедитесь, что она должна быть уникальной.

Итак, правильный код ниже:

                      binding.updatesEpoxyRecycler.withModels {
                postsList.forEachIndexed() { pos, it ->
                    return@forEachIndexed updates { // here added return 
                        id(pos) // set id for each item
                        postContent(it)
                        onPostClick { view ->
                            when (view?.id) {
                                R.id.layout_recycler_updates_share -> {
                                    sharePost(pos)
                                }
                                R.id.layout_recycler_updates_file_download -> {
                                    context?.showShortToast("File download clicked on pos = $pos")
                                }
                                R.id.layout_recycler_updates_bookmark -> {
                                    Timber.d("posts active observer in on click of button = ${viewModel.posts.hasActiveObservers()}")
                                    handleBookmarkClick(postsList[pos])
                                }
                            }
                        }
                    }
                }
            }

В приведенном выше коде вы можете видеть, что я вернул модель и после этого установил идентификатор для каждого элемента. Для вашего удобства я прокомментировал это в коде.

Не стесняйтесь спрашивать, если что-то неясно

Другие вопросы по тегам