Как изменить Button из Listview через адаптер?

Рейтинг: 1Ответов: 1Опубликовано: 11.04.2015

Есть ListView

Есть класс Item

Есть класс MyAdapter

Список состоит из модульных объектов. Как поменять свойство элемента , к примеру, Button в этом списке?

В функции getView адаптера к кнопке ставим бекграунд.

Там же в адаптере есть функция updatecurrentitem . Ее я вызываю с другой активности.

Как мне найти кнопку конкретного элемента и поменять ее свойство?

Ответы

▲ 2

Адаптер СОЗДАЕТ view для отображения в списке , когда список запрашивает требуемый ему пункт для отображения . Изменения view в адаптере не будут отображаться , пока список вновь не запросит эту позицию - это может случиться не очень скоро.
Чтобы обновить айтем уже после создания , вам надо получить доступ к его уже созданному адаптером view , это решается уже не через переопределение getView() в адаптере , а через доступ к нужному view "снаружи" , затем уже из этого вью добываете кнопку и меняете ей фон на новый .

int visiblePosition = listView.getFirstVisiblePosition();
View v = listView.getChildAt(position - visiblePosition);
Button button  = (Button) v.findViewById(R.id.button);//id кнопки в разметке айтема
button.setBackground(background);// вставить свое значение для фона

Так же не забудьте обновить данные в самой модели

Вторым вариантом решения вашего вопроса может быть следующая схема :

1.Изменяете нужное значение в коллекции объектов (модели), которую передаете в адаптер 2.Делаете listView.notifyDataSetChanged(); - это заставит адаптер пересоздать view айтемов списка используя текущие данные

Какой из способов предпочтительнее - решать вам , в зависимости от конкретных условий реализации . Второй способ , естественно , более нагруженный для устройства и обычно используется , когда нужно обновить многие (все) айтемы списка разом - он влияет на содержимое всего списка