Выделение выбранного представления в Listview Android

У меня есть список и соответствующий адаптер списка.

Представления, отображаемые в Listview, я написал сам, и это макет кадра с одной кнопкой и одной кнопкой изображения. Кнопка изображения представляет собой красный крест, который удаляет запись, а обычная кнопка выбирает запись.

Когда пользователь нажимает обычную кнопку, этот элемент выбирается, и я хочу показать это пользователю, установив зеленый фон этого элемента. Приложение запоминает, какой элемент выбрал пользователь, и при следующем отображении списка этот элемент должен быть выбран и выделен зеленым цветом.

Обратите внимание, что в моем списке всегда должен быть один и ТОЧНО один выбранный элемент.

В методе getView(.. в моем адаптере очень легко изменить цвет кнопки, когда пользователь нажимает ее. Но кнопка, которая была зеленой до того, как пользователь нажал ее, мне невозможно указать.

  • Я попытался сохранить ссылку на ранее выбранную кнопку, но она никогда не перерисовывалась.
  • Я попытался удалить и добавить элемент данных из списка, чтобы вызвать notifyDataSetChanged, но он никогда не перекрашивался
  • Я попробовал setChoiceMode(ListView.CHOICE_MODE_SINGLE), но это ни к чему не привело, потому что я не знаю, как поймать выбор в моем методе getView и рисовать по-разному в зависимости от того, выбран он или нет.

Все руководства, которые я вижу, предлагают использовать notifyDataSetChanged. Однако базовые данные в этом случае НЕ изменяются, и это не является правильным (или возможным) решением.

Итак, я думаю, что моя проблема сводится к следующему: КАК я могу ссылаться на другое представление в моем списке??

(И да, я видел это сообщение: Выделить выбранный элемент в ListView на Android , Он описывает мою проблему и отвечает «а затем измените цвет фона предыдущего выбранного элемента на нормальный», но я все еще не могу обратиться к ПРЕДЫДУЩЕМУ выбранному элементу.

Спасибо!


person Joakim    schedule 03.03.2015    source источник


Ответы (1)


Почему вы не используете переключатели? Это именно тот дизайн, который вам нужен. Вы можете добавить «красный крест» на каждую строку, чтобы удалить строку. Выбранная строка уникальна, и вы можете выполнить итерацию RadioButton.isChecked(); из RadioGroup, чтобы соответствующим образом установить цвет фона.

person Nino Lenoska    schedule 03.03.2015
comment
Вы имеете в виду вместо кнопки изображения? (Потому что мне нужен функционал как по нажатию крестика, так и вне крестика). Если я заменю кнопку изображения радиокнопкой, у меня снова возникнет та же проблема - ранее нажатая радиокнопка находится в представлении, которого я не могу достичь. (А в другом случае я не получаю желаемой функциональности) - person Joakim; 04.03.2015