169 похожих чатов

Народ, как будет адекватнее реализовать в списке адаптера RecyclerView активный

элемент? Самый простой пример этого - списки в аудиоплеерах, где выделен всегда только один активный элемент. Мне на ум приходит только вариант с добавлением в data class элемента специального поля, типа isActive. Однако в таком случае придется хранить id предыдущего элемента, чтобы при выделении нового убрать выделение со старого. Может есть ещё какое-то решение, о котором я не догадался, или использовать то, что я описал выше?
P.S. RecyclerView selection для такого мне не подойдёт. Он уже используется для реального выделения множества элементов, к которым применяются действия.

18 ответов

6 просмотров

выделеный элемент где хранится?

Перед переключением isActive=true в цикле выставляй всем элементам isActive=false

Viktor- Автор вопроса

Все элементы в БД. Однако, в view через колбэк адаптера у меня есть доступ к текущему нажатому элементу.

отображаемые элементы где хранятся?

Viktor- Автор вопроса

Ну тут наверное лучше все же хранить id предыдущего элемента, чтобы базу не дергать кучу раз

Viktor- Автор вопроса

Все элементы(и они все отображаемые) показываются из БД(Room) в адаптере. Или под отображаемыми вы имели что-то иное? Все элементы БД - отображаемые. Доступ ко всему списку у меня есть везде.

сам List<Item> где находится?

Viktor- Автор вопроса

В ViewModel. Flow<List<Item>>

Пробежать по адаптеру, всем поставить false, кроме одного выбранного, вызвать notify updated... Более эффективно - найти у кого true, поменять на false. Выбранному поставить true, вызвать notify updated только для этих двух элементов.

Viktor- Автор вопроса

Просто не хотелось для этого поле заводить, но, видимо, придется. Спасибо за ответ.

Ну, можно только id выбранного хранить. Тогда поле не нужно.

Viktor- Автор вопроса

Хм. И вправду можно. Проверю как на практике выйдет. Спасибо ещё раз.

а какая разница хранить в поле id или объект?

Так даже экономнее в плане расхода памяти - не нужно всем лишнее поле заводить. И предыдущий id всегда известен.

Viktor- Автор вопроса

Чтобы не захламлять data class элемента

Viktor- Автор вопроса

Справедливо

аааа, я про поле внутри адаптера говорил

Ага, адаптер должен держать этот id.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
вопрос по москвину - не понимаю вот такого вопроса похоже Сколько разных всегда завершающихся функций с типом a -> a -> b -> a -> a можно реализовать? Две функции одинаково...
Fedor
11
Слушайте, ещё такая интересная задачка. Сделан аудит действий пользователей через триггеры в базе, соответственно каждый пользователь имеет свой логин и пароль в базе. Это пре...
Сергей Бычков
11
Скажите, тут нет проблемы? IMyInterface1 = interface function GetInterface2: IInterface2; ... function TMyInterface.GetInterface2: IInterface2; begin Result := TI...
Ruslan aka DUDE
18
Как попросить stack install делать executable без .exe на винде?
Danila Danko
9
Утра доброго. Просветите пожалуйста. Хочу сделать rest сервер на делфи. Посмотрел 3 фреймворка: dmvc, Mars, mormot. Ни в одном из них не упоминается ассинхронная обработка вхо...
Сергей Бычков
10
возможно для форматирования TimeStampZ нужен другой механизм, не?
Роман Лях (rgreat)
13
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта