@Devate

Android ListView: как использовать multiple и single группы одновременно?

Здравствуйте!

Делаю своё первое приложение, никогда и ни разу не писал ещё вопросы, всё находил через интернет, сделано уже очень много, но с этой проблемой справиться не могу. Уже без вранья неделю сижу и мучаюсь. Решил всё-таки просить помощи.

Есть ListView, в котором присутствуют группы элементов: заголовок группы и непосредственно Checkable-элементы списка. Вся сложность в том, что мне не подходит режим выбора multipleChoice или singleChoice, так как у меня есть группы элементов и такие, и такие.

Представим, что это выбор ингредиентов для пиццы. Первая группа - тип теста (тонкое / толстое) - единственный выбор, вторая группа - добавки (сыр, маслины, колбаса и так далее) - множественный выбор.

На данный момент я сделал так: android:choiceMode="multipleChoice", вывожу через адаптер элементы первой группы с android:drawableLeft="?android:attr/listChoiceIndicatorSingle", элементы второй группы - с android:drawableLeft="?android:attr/listChoiceIndicatorMultiple". Но этого, понятно, недостаточно, так как одиночные элементы всё равно можно выбирать несколько вариантов. Я выкручивался так: у ListView по событию itemClick проверяю - если элемент из одиночной группы, то снимаю через setItemChecked выбор с других элементов. Это работает, список выглядит так, как нужно. Но, происходит странное: setItemChecked почему-то даёт задержку! И выбор списка как бы тормозит на полсекунды! То есть, был тип теста Тонкое, ставим Толстое и момент перехода чека подтормаживает... Если setItemChecked убрать - никаких тормозов нет. В режиме android:choiceMode="singleChoice" тоже при переключении радио-кнопок никаких тормозов нет. А вот вручную если - есть!

Вообще, это решение наверняка костыльное и неправильно. Но я не могу найти другого. Словно я первый человек на планете, которому понадобились одиночные и множественные группы в одном ListView! Не верю :)

Подскажите, пожалуйста, как всё-таки корректно реализовать задуманное? Спасибо!
  • Вопрос задан
  • 156 просмотров
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Выкинь листвью, используй RecyclerView и используй Adapter delegates. Все чекбоксы сделай кастомно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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