Обновить Adapter
Есть адаптер для RecyclerView. При нажатии элемент, открывается второе активити, при чем первое не закрывается (Нету finish()). Как только пользователь наигрался во второе активити, он нажимает назад, и попадает снова на RecyclerView. После этого на том элементе, на который нажимал пользователь должны появиться галочка
Галочку я добавляю в методе onBindViewHolder (в реализации адаптера). В таком случае галочка появляется только тогда, когда пользователь отматает далеко и вернется обратно (система забывает и отрисовывает вновь данный элемент). Как сделать так, чтобы при возвращении со второго активити галочка сразу же появилась без нужды в проматывании и возвращении?
Я придумал КОЛХОЗНОЕ решение которое мне не подходит. В методе onResume() класса, в котором лежит адаптер, поставил принудительную очистку и перезаполнение адаптера, что заставляет систему перерисовать и галочка появляется. Я полагаю, что это решается каким то методом, но не знаю каким. Спасибо
Ответы (1 шт):
Создаете объект вроде такого:
class ListItem {
private boolean isChecked;
private YourRecyclerObject data;
// setters and getters
}
Создаете список этих объектов где-то за пределами вашего адаптера (Presenter/ViewModel и т.п. сущности). Передаете этот список в ваше адаптер и в зависимости от поля isChecked проставляете галку.
При нажатии на элемент меняете значение этого параметра в вашем Presenter/ViewModel в списке и снова вызываете обновление адаптера с новым параметром. Можно вызывать и в другом месте если у вас галка должна появиться не сразу после клика, но суть все равно такая же должна быть. Так ваш адаптер будет тупой и не зависеть от внешних факторов, а настройки элементов вы сможете контролировать извне.
Чтоб не обновлять всякий раз весь список вместо вызова notifyDataSetChanged() вызывайте или notifyItemChanged(position). Или еще лучше используйте DiffUtils
