Android: кнопка отключения в списке - PullRequest
0 голосов
/ 17 марта 2012

Я добавил кнопку в элемент списка, и после нажатия кнопки я хочу, чтобы кнопка была отключена.Я использовал приведенный ниже setOnClickListener для своей кнопки в пользовательском адаптере, но проблема в том, что когда я нажимал на кнопку, кнопка другого элемента списка также отключалась.Например, когда я нажимал кнопку элемента 1, кнопка элемента 1 затем отключалась, но кнопка элемента 4 также отключалась одновременно, хотя я не нажимал на нее.А также, когда я прокручиваю вверх и вниз, кнопки всех элементов просто включаются и отключаются случайным образом.Кто-нибудь знает, почему это происходит?

   holder.viewBtn.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        holder.viewBtn.setEnabled(false);
                        showInfo();                 
                    }           });

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Я был так расстроен, когда впервые столкнулся с этой проблемой!

Проблема в том, что просмотр списка просто не запоминает состояние кнопки.Не знаю, если это ошибка, но в любом случае мне нужен был выход, и именно это я и сделал.

Я полагаю, что вы используете специальный адаптер с держателем вида.Означает, что вы на правильном пути.Вам нужно сохранить массив логических значений, размер которых равен количеству элементов в вашем списке.в вашем 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();
}

, убедитесь, что вы заполнили состояние после описанного выше шага.

Я не видел вашу реализацию, но мне пришлось нажать кнопкув элементе, а затем удалите элемент из списка, используя его.Поэтому мне нужно было позаботиться о поддержании состояния.

Так что будьте осторожны с состояниями, когда базовые данные изменились.

Извините за длинный пост, но проблема такая: (

Я нашел ссылку, которая имеет решение в базовом формате

1 голос
/ 17 марта 2012

Это происходит потому, что ListView повторно использует View с ошибочным образом.Либо внедрите собственный ListAdapter без View повторного использования, либо отправьте отчет об ошибке в Google

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...