Отключение интерактивности для CheckBoxes в ListView - PullRequest
0 голосов
/ 30 июля 2011

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

Вот мое демонстрационное приложение на github .

Нажатие на элемент ListView в любом месте, кроме флажка, правильно регистрирует, что флажок установлен.Нажатие на поле не вызывает событие OnItemClick и, следовательно, тот факт, что флажок установлен, не зарегистрирован.

Я мог бы добавить прослушиватель для каждого флажка и поддерживать состояние внутри адаптера, что было бы неплохо, но мне нужен какой-то способ сообщить HomeActivity, когда в списке проверены приложения, а когда нет (для включения / отключения некоторых кнопок).Я рассматриваю возможность использования Callback для этого, но я никогда не делал этого на Java.

Чтобы решить некоторые общие вопросы в этой проблеме:

  • Флажок имеет android: focusable иandroid: focusableInTouchMode оба установлены в false
  • Я попробовал android: clickable = "false" на флажке, но затем метод OnItemClick для списка никогда не вызывался.
  • Я поддерживаю состояние флажковв HashMap, чтобы их можно было правильно установить в адаптере при повторном использовании представлений.

Ответы [ 3 ]

1 голос
/ 22 октября 2016

Отключение флажка, активируемого внутри метода getView (), так как

((CheckBox) result.findViewById(R.id.checkBox)).setClickable(false);

работает для меня.

0 голосов
/ 02 августа 2011

При этом будут получены все представления в вашем просмотре списка, будет установлен флажок в каждом представлении и добавлен его в список, если он отмечен:

List<CheckBox> listOfCheckboxes = new ArrayList<CheckBox>();
List<View> listOfViews = new ArrayList<View>();
listView1.reclaimViews(listOfViews);
for (View v : listOfViews)
{
    CheckBox cb = (CheckBox)v.findViewById(R.id.checkbox);
    if (cb.isChecked())
    {
        listOfCheckboxes.add(cb);
    }
}
0 голосов
/ 30 июля 2011

Поскольку вы установили флажок focusable и focusableInTouchMode как false, он не получит никакого события.Посмотрите, будет ли работать прослушиватель щелчков по списку или флажок, у вас не может быть, чтобы они оба работали одновременно.

Что вы можете сделать, это подключить слушателя в bindView на виде, а также на флажке.Таким образом, вы можете получить вызов слушателя в HomeActivity, когда нажата строка или флажок ...

Вы можете создать интерфейс для него ..........

Public Interface MyClickListener{
    public void onClick();

}

Создать объект MyClickListener object;
object.onClick ();

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