2012-05-11 3 views
2

Каков правильный способ изменения всех дочерних элементов (не только видимых) списка. У меня есть изображение, которое установлено, по умолчанию, чтобы visibilty ушел. Я хочу сделать его видимым после того, как пользователь нажмет кнопку (для всех элементов).Android Listview изменить все позиции

Спасибо!

ответ

2

Каков правильный способ изменения всех дочерних элементов (не только видимых) списка.

Одна вещь, чтобы понять о ListView, заключается в том, что не все элементы списка генерируются (завышены/заполнены) в любой момент времени.

Предположим, например, ваш список Adapter имеет в нем 1000 наименований, но ListView может отображать только 10 одновременно. Было бы очень плохо потратить ресурсы (например, память), чтобы создать все 1000 элементов списка.

Вместо этого, только 10 видимые элементы создаются и каждый раз, когда вы перечисляете один с верхней или нижней части экрана, один, который исчез повторно циклическое путем передается как convertView в метод Adapter'sgetView.

getView (int position, View convertView, ViewGroup parent) 

Для того, чтобы делать то, что вы просите, вы должны продлить любой Adapter типа вы хотите использовать и переопределить метод getView. В этом методе проверьте, convertView - null или нет. Если это так, надуйте свой собственный экземпляр макета списка. Если он не равен нулю, повторите использование элементов интерфейса (TextView, ImageView и т. Д.).

Чтобы увидеть все ImageView элементов, используйте глобальные Boolean, такие как showImageView, которые будут переключаться при нажатии кнопки. Затем используйте это в getView, чтобы решить, следует ли устанавливать видимость ImageView.

См Adapter.getView(...)

+0

Отличное объяснение! теперь он работает. 10X :) –

0

Возможно, вы должны установить видимость изображения в ListAdapter's getView() в зависимости от некоторого значения поля. При нажатии кнопки вы изменяете это значение поля, а затем вы вызываете ListAdapter.notifyDataSetChanged, чтобы обновления списка отображались - getView, после чего вызывается и изменяется изображение, потому что ваше значение поля изменилось.

0

Внутри getView() вашего адаптера, вы хватаете ImageView и установить его видимость пошли:

ImageView iv = (ImageView)convertView.findViewById(R.id.image_view); 
iv.setVisibility(buttonClicked ? View.GONE : View.VISIBLE); 

Затем, когда пользователь нажимает на кнопку, установите buttonClicked = true и вызовите notifyDataSetChanged() к обновите ListView.

Смежные вопросы