Элементы ListView меняют цвет фона

У меня странное поведение в моем приложении... У A есть ListView, где нечетные элементы имеют фон #ffffff, а четные элементы имеют #f2f7f7, и выглядит так:

Начало активности ИЛИ список касаний (без выпуска)

Однако, как только я начинаю прокручивать список, четные элементы слегка меняют цвет, становясь #f7f7f7, вот так:

При прокрутке и после отпускания прокрутки

Любые идеи? Если вам нужна дополнительная информация, пожалуйста, спросите. Я озадачен таким поведением.

Дополнительная информация:

Я устанавливаю цвет фона каждого элемента в методе getView(), например так:

protected final int[] colors = new int[] { R.drawable.states_list_odd, R.drawable.states_list_even };
...
// Alternates list items' background
int colorPos = position % colors.length;
convertView.setBackgroundResource(colors[colorPos]);

person gnclmorais    schedule 30.12.2011    source источник


Ответы (3)


Простые вещи, на самом деле. android:scrollingCache="false" решил эту проблему.

person gnclmorais    schedule 29.01.2012

Представления, используемые для элементов, повторно используются при прокрутке списка (нет необходимости создавать новые). Итак, когда вы прокручиваете список вниз, элемент в позиции 0 может отображаться в позиции 10. Это будет тот же объект View, и перед отображением будет вызываться getView с параметром convertView, установленным для этого конкретного View, чтобы вы могли его заполнить. с данными (и укажите свои стили). Это просто оптимизация.

Итак, вам нужно указывать цвет фона для элемента каждый раз, когда для него вызывается getView в вашем адаптере списка.

person user1234567    schedule 30.12.2011
comment
Я обновил свой вопрос, чтобы показать, как установить цвет фона каждого элемента на getView(). - person gnclmorais; 30.12.2011

программно попробуй. yourListView.setScrollingCacheEnabled(false);

person mavixce    schedule 11.07.2012