2010-10-06 3 views
2

My ListActivity привязан к ArrayAdapter, где я переопределял метод getView(). Если я изменяю видимость виджета в этом методе или изменяю цвет фона представления, эти изменения каким-то образом теряются после того, как измененный элемент списка вернется после прокрутки экрана. Фактически, некоторые другие представления в списке собирают изменения.Ведение состояния списка ListView

Как получить измененный вид, чтобы он выглядел одинаково, когда он перерисовывается после прокрутки?

+0

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

ответ

3

Разве вы каждый раз раздуваете новое представление или используете передаваемый преобразователь?

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

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

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