У вас есть два варианта обработки фокуса в ListView, управляемом ListView#setItemsCanFocus(boolean)
. Если вы хотите, чтобы отдельные представления в элементе списка фокусировались так, чтобы пользователь мог взаимодействовать с ними по отдельности, а не с элементом списка в целом, вызывайте его, передавая true
. false
- это поведение по умолчанию.
Поведение по умолчанию, при котором ListView управляет фокусом элемента и щелчками, по сути является ярлыком / оптимизацией для общего случая, когда весь элемент действует как единое целое с точки зрения взаимодействия, но его расположение может быть сложным. Когда вы говорите ListView, что его элементы могут фокусироваться, он отключает это специальное поведение, и вам следует использовать более традиционные механизмы обработки событий в представлениях в элементах списка. (Слушатели, переопределены на * методы и т. Д.)
Но почему ваши элементы списка перестают принимать щелчки, когда ваш ListView не настроен для фокусируемых элементов? ListView будет генерировать события щелчка элемента, только если представление элемента списка возвращает false
из View#hasFocusable()
. Это означает, что никакие дочерние элементы элемента списка не могут быть сфокусированы, если вы хотите получать для него события щелчка элемента. Как только ваша кнопка становится видимой, элемент списка имеет фокусируемый дочерний элемент и больше не будет получать события щелчка элемента списка.