#getview #android #listview #java
У меня есть ListView, в каждом элементе которого есть 2 кнопки. Я, естественно, использую свой адаптер для отображения ListView. В функции getView, которая формирует вью для конкретной строки списка я выставляю OnClick хендлеры для этих кнопок. Проблема в том, что кнопки начинают реагировать на клики только после второй перерисовки. То есть, что бы нажать на кнопку, которая находится в первой строке списка, мне нужно опустить список вниз так, что бы первая строка ушла за пределы экрана, и перерисовалась. Вопрос: как вызвать принудительную перерисовку (или что там вызывается перед отрисовкой строки), или как выставить онклик обработчики так, что бы они работали сразу?
Ответы
Ответ 1
Я думаю, что выставление хэндлеров в getView() - это плохая идея. Я бы сделал по другому: сначала бы сформировал массив вьюшек, выставил бы каждому из них хэндлеры, потом при рисовании ListView уже брал вьюшки из массива и возвращал через getView().Ответ 2
Не знаю, поможет ли, но попробуйте вызвать прорисовку списка вручную: listview.invalidate(). Если конечно они ведут себя так из-за прорисовки, как Вы говорите.Ответ 3
У меня недавно тоже стояла такая задача (элементы у меня были все одного вида). Как я поступил: набросал шаблон одного элемента ListView в xml (две кнопки, три текстовых поля и прогресс бар). Затем в xml для кнопок назначил обработчики нажатия событий: ... android:OnClick = "" ... и уже когда формировал адаптер, я добавил свой ViewBinder через .setViewBinder у адаптера. В этом ViewBinder'e я каждой кнопке присваивал тег, который зависел от номера элемента в списке ListView, и уже в обработчике я смотрел у View тег и выполнял свои действия. Может это тебе поможет. У меня не возникло никаких проблем с нажатием на кнопки, все запустилось с первого раза. Если не понятно будет, могу привести пример кода.
Комментариев нет:
Отправить комментарий