TransWikia.com

Обновить Adapter

Stack Overflow на русском Asked by Android Junior on November 22, 2021

Есть адаптер для RecyclerView. При нажатии элемент, открывается второе активити, при чем первое не закрывается (Нету finish()). Как только пользователь наигрался во второе активити, он нажимает назад, и попадает снова на RecyclerView. После этого на том элементе, на который нажимал пользователь должны появиться галочка

введите сюда описание изображения

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

Я придумал КОЛХОЗНОЕ решение которое мне не подходит. В методе onResume() класса, в котором лежит адаптер, поставил принудительную очистку и перезаполнение адаптера, что заставляет систему перерисовать и галочка появляется. Я полагаю, что это решается каким то методом, но не знаю каким. Спасибо

One Answer

Создаете объект вроде такого:

class ListItem {

    private boolean isChecked;
    private YourRecyclerObject data;

    // setters and getters
}

Создаете список этих объектов где-то за пределами вашего адаптера (Presenter/ViewModel и т.п. сущности). Передаете этот список в ваше адаптер и в зависимости от поля isChecked проставляете галку.

При нажатии на элемент меняете значение этого параметра в вашем Presenter/ViewModel в списке и снова вызываете обновление адаптера с новым параметром. Можно вызывать и в другом месте если у вас галка должна появиться не сразу после клика, но суть все равно такая же должна быть. Так ваш адаптер будет тупой и не зависеть от внешних факторов, а настройки элементов вы сможете контролировать извне.

Чтоб не обновлять всякий раз весь список вместо вызова notifyDataSetChanged() вызывайте или notifyItemChanged(position). Или еще лучше используйте DiffUtils

Answered by Sergei Buvaka on November 22, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP