English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Быстрое решение проблемы с неактивными событиями клика по элементам ListView в Android

В повседневном процессе разработки наши ListView могут не только просто отображать текст или кнопки, но и отображать сложные макеты. В этом случае нам нужно написать макет и создать пользовательский adapter, обычно наследуя от BaseAdapter, пример кода см. ниже. При написании的事件 обработки клика ListView OnItemClickListener, метод onItemClick не выполняется, что приводит к тому, что событие клика по элементам ListView не работает, а событие клика по View в элементе можно обработать в методе getView. Основная причина, по которой клик по элементу не работает, заключается в том, что в вашем пользовательском элементе есть такие подуправления, как ImageButton, Button, CheckBox и т.д. (можно также сказать, что это подуправления Button или Checkable), которые получают фокус, поэтому часто при клике по элементу изменяется подуправление, а сам элемент не реагирует на клик.

В этом случае можно использовать descendantFocusability для решения проблемы, где у descendantFocusability есть три соответствующих атрибута.

Этот атрибут определяет отношение между ViewGroup и его подконтролами, когда на view устанавливается фокус.

У свойств есть три значения:

beforeDescendants: ViewGroup будет приоритетно получать фокус перед своими подклассовыми контролами.

afterDescendants: ViewGroup только будет получать фокус, когда его подклассовые控件 не требуют фокуса.

blocksDescendants: ViewGroup будет перекрывать подкласс控件 и напрямую получить фокус.

Обычно мы используем третий вариант, добавив атрибут android:descendantFocusability="blocksDescendants" к root разметке Item.
В моей ситуации item разметка содержит кнопку ImageButton,因为这个 компонент сильно захватывает события, как и root button; поэтому после запуска, клик по listviewitem не работает. Решите эту проблему с помощью вышеуказанного метода; 当然也可以将 imagebutton изменить на imageview, и это также решит проблему.

Заявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему владельцу, контент предоставлен пользователями Интернета, сайт не обладает правами собственности, не был отредактирован вручную, и не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При подтверждении факта нарушения сайт незамедлительно удаляет涉嫌侵权的内容.

Основной учебник
Рекомендуем для просмотра