элемент? Самый простой пример этого - списки в аудиоплеерах, где выделен всегда только один активный элемент. Мне на ум приходит только вариант с добавлением в data class элемента специального поля, типа isActive. Однако в таком случае придется хранить id предыдущего элемента, чтобы при выделении нового убрать выделение со старого. Может есть ещё какое-то решение, о котором я не догадался, или использовать то, что я описал выше?
P.S. RecyclerView selection для такого мне не подойдёт. Он уже используется для реального выделения множества элементов, к которым применяются действия.
выделеный элемент где хранится?
Перед переключением isActive=true в цикле выставляй всем элементам isActive=false
Все элементы в БД. Однако, в view через колбэк адаптера у меня есть доступ к текущему нажатому элементу.
отображаемые элементы где хранятся?
Ну тут наверное лучше все же хранить id предыдущего элемента, чтобы базу не дергать кучу раз
Все элементы(и они все отображаемые) показываются из БД(Room) в адаптере. Или под отображаемыми вы имели что-то иное? Все элементы БД - отображаемые. Доступ ко всему списку у меня есть везде.
сам List<Item> где находится?
В ViewModel. Flow<List<Item>>
Пробежать по адаптеру, всем поставить false, кроме одного выбранного, вызвать notify updated... Более эффективно - найти у кого true, поменять на false. Выбранному поставить true, вызвать notify updated только для этих двух элементов.
Просто не хотелось для этого поле заводить, но, видимо, придется. Спасибо за ответ.
Ну, можно только id выбранного хранить. Тогда поле не нужно.
Хм. И вправду можно. Проверю как на практике выйдет. Спасибо ещё раз.
а какая разница хранить в поле id или объект?
Так даже экономнее в плане расхода памяти - не нужно всем лишнее поле заводить. И предыдущий id всегда известен.
Чтобы не захламлять data class элемента
Справедливо
аааа, я про поле внутри адаптера говорил
Ага, адаптер должен держать этот id.
Обсуждают сегодня