2012-05-04 1 views
1

У меня есть галерея изображений, в которой я помещал красную рамку вокруг выбранного изображения (когда пользователь сначала открывает экран, выбирается первый, поэтому я рисую рамку вокруг первого вида).Android - Как заставить галерею перерисовать его виды?

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

Проблема в том, что я не могу изменить границу внутри события галереи onClick. Если я его изменю, ничего не происходит (я думаю, потому что элементы галереи не перерисовываются). Я попытался вызвать invalidate() и postInvalidate() как в моей переменной галереи, так и в каждом из ее представлений, но это не работает! Представления не перерисовываются (т. Е. Красная рамка остается только в первом элементе галереи).

Есть ли у кого-нибудь идеи, что здесь происходит?

ответ

3

В коде адаптера удерживайте значение int, которое будет занимать позицию выбранного View. В методе onItemClicked для Gallery обновите переменную int с поставленным положением. Затем в методе getView, если занимаемая позиция является выбранной позицией, нарисуйте свою границу. Вы можете пойти и применить свою границу с поставленным View в onItemClicked или позвонить по телефону notifyDataSetChanged на адаптер. Первый метод передается, так как notifyDataSetChanged воссоздает все видимые View.

Как правило, вам также необходимо проверить, не является ли не выбранным положением, чтобы вы могли удалить границу из повторно используемого View. Тем не менее, Gallery всегда создает новый View. convertView всегда имеет значение null для Gallery.

+0

Прохладный человек. Я сделал это, и это сработало. Благодаря! – Tiago

0

попытайтесь использовать requestLayout(); удачи.