В моем макете есть кнопка и список. Как я могу изменить изображение выбранного элемента при нажатии кнопки. Допустим, я выбираю 5 элементов, и после того, как я нажимаю кнопку, изображения для этих 5 элементов будут изменены.

Поэтому я не понимаю, какую функцию мне следует использовать. Прямо сейчас я использовал button.setOnClickListener, но это кажется неправильным, потому что при нажатии кнопки будет изменено только изображение самого первого элемента. Стоит ли использовать listview.setItemOnClickListener? Или есть другой способ сделать это?

Большое спасибо!

0
user3799934 12 Июл 2014 в 07:05

3 ответа

Лучший ответ

Добавьте логическое значение к объекту данных в вашем адаптере. Скажем, у вас есть ArrayAdapter . Добавьте какое-то поле «selected» в MyDataObject и переключайте его, когда вы «выбираете» строку.

Переопределите getView в адаптере (кстати, вам понадобится специальный адаптер. Я бы просто расширил ArrayAdapter). Когда вы визуализируете строку, если поле «selected» истинно, покажите «другое» изображение.

Когда вы нажимаете кнопку, вызываете notifyDataSetChanged на адаптере. Это заставит видимые строки обновляться (и вызывать getView для каждой).

Я думаю, это сработает.

Поскольку вы хотите, чтобы изображения изменялись только при нажатии кнопки, вам необходимо иметь какое-то глобальное логическое значение, чтобы getView не отображал изображение, пока кнопка не была нажата.

Сложность здесь в том, что вам приходится иметь дело со строками, которые могли быть прокручены вне поля зрения, которые не имеют активных представлений, но логически существуют. Было бы действительно сложно объяснить концепцию здесь. Я бы предложил несколько руководств по ListView, если вы не знакомы с переработкой представлений строк.

0
Kevin Galligan 13 Июл 2014 в 04:28

Вы можете использовать прослушиватель нажатия кнопки, а также на itemClickListener, но для создания представления изображения в выбранном состоянии в списке необходимо вызвать метод setSelected родительского макета imageview.

Пожалуйста, оставьте комментарий, если вы меня не поняли.

Благодарность

0
Ankur Chaudhary 16 Окт 2014 в 13:55

Вы можете использовать собственный базовый адаптер для listview и setonclicklistener в методе getView () .... см. Учебник здесь это надежда на помощь

0
Community 23 Май 2017 в 12:12