Представления элементов строки RecyclerView скрывают / показывают, что портятся при прокрутке Recyclerview - PullRequest
0 голосов
/ 05 марта 2019

Я использую RecyclerView для отображения списка продуктов в моем приложении, мне нужно сгруппировать продукт по проходам.в то время как данные выбираются впервые в списке, продукты сгруппированы правильно по проходу.Когда мы прокручиваем представление, разделитель группы проходов отображается для неправильного элемента, и разделитель восстанавливается в правильное положение после автоматического обновления onBindViewHolder.

MyAdapter.class
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { 
    itemsGrouping(pickItem, pickItemView, holder.adapterPosition)
}

private fun itemsGrouping(pickItem: PickItem, pickItemView: View, adapterPosition: Int) {
//Based on some condition
if(SomeCondition)
    itemDivider(pickItemView,true)
else 
    itemDivider(pickItemView,false)
}

private fun itemDivider(v: View, boolean: Boolean) {
    if(boolean) {
        v.visibility = View.VISIBLE
    } else {
        v.visibility = View.GONE
    }
 }

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Проблема в том, что RecyclerView перерабатывает предыдущие представления для обеспечения эффективности.Я полагаю, что SomeCondition содержит артефакты, принадлежащие предыдущим держателям.

Так что при

itemsGrouping(pickItem, pickItemView, holder.adapterPosition)

вы должны получить pickItem и pickItemView от нового привязанного держателя.Вы должны использовать как

pickItemView = holder.findViewById(R.id.pickItemView);

Или рассмотреть возможность использования Библиотеки привязки данных

Вот хороший пример (он на Kotlin): DataBoundListAdapter

Как только вы расширяете свой адаптер до DataBoundListAdapter и переопределяете метод bind (), все внутри bind выполняется для каждой строки, поэтому вы не получите повторных результатов.

Примечание: обратите внимание "executePendingBindings ()"

0 голосов
/ 05 марта 2019

Ну, вы должны знать, что держатели представлений повторно используются в RecyclerView, поэтому, вероятно, не правильная идея попытаться определить видимость делителя в onBindViewHolder.Я бы рекомендовал использовать декоратор для разделителей.Вот вопрос и ответ для этого Как добавить разделители и пробелы между элементами в RecyclerView?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...