Я был так расстроен, когда впервые столкнулся с этой проблемой!
Проблема в том, что просмотр списка просто не запоминает состояние кнопки.Не знаю, если это ошибка, но в любом случае мне нужен был выход, и именно это я и сделал.
Я полагаю, что вы используете специальный адаптер с держателем вида.Означает, что вы на правильном пути.Вам нужно сохранить массив логических значений, размер которых равен количеству элементов в вашем списке.в вашем btnClick()
установите состояние элемента в массиве.
Теперь каждый раз, когда вы прокручиваете или делаете что-то, что делает перерисовку списка, вызывается getView()
.Поставьте отметку в вашем getView()
о состоянии элементов и включите / отключите его.Еще одна вещь: убедитесь, что вы реализовали и if{}
, и else{}
для проверки.
if(checked){
holder.viewBtn.setEnabled(false);
}else{
holder.viewBtn.setEnabled(true);
}
, если вы не сделаете этого, вы увидите странное поведение.Еще одна вещь, если вы используете метод
if(convertview == null){
//create the holder
}else{
convertview = getTag();
}
, убедитесь, что вы заполнили состояние после описанного выше шага.
Я не видел вашу реализацию, но мне пришлось нажать кнопкув элементе, а затем удалите элемент из списка, используя его.Поэтому мне нужно было позаботиться о поддержании состояния.
Так что будьте осторожны с состояниями, когда базовые данные изменились.
Извините за длинный пост, но проблема такая: (
Я нашел ссылку, которая имеет решение в базовом формате