English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В повседневном процессе разработки наши 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 (при отправке письма, пожалуйста, замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При подтверждении факта нарушения сайт незамедлительно удаляет涉嫌侵权的内容.