На Android нажмите, чтобы развернуть список, и нажмите на кнопку? - PullRequest
1 голос
/ 31 мая 2010

Я только начал свою карьеру в качестве программиста Android, и в настоящее время в значительной степени полагаюсь на примеры кода и примеры API. Я работал с этим примером API , чтобы создать расширяемый список элементов (обратите внимание, что в этом примере не используется ExpadableListView).

Играя с примером, я попытался добавить другой виджет, который стал бы видимым и исчезал бы одновременно с текстом (mDialogue в примере кода). Это хорошо работает с другим TextView, но как только я попытался добавить виджет кнопки, он перестал работать. Список будет расширяться при первом нажатии, показывая мои скрытые TextView и Button, но он не исчезнет при дальнейших нажатиях. Однако эта кнопка активна, и я смог настроить прослушиватель onClick для изменения текста кнопки вперед и назад.

Я начинаю задаваться вопросом, нельзя ли просто создать элемент, который можно активировать нажатием, внутри элемента списка, который можно активировать нажатием? Или есть какая-то работа вокруг? Решит ли это мою проблему, если я воспользуюсь ExpandableListView?

1 Ответ

4 голосов
/ 01 июня 2010

У вас есть два варианта обработки фокуса в ListView, управляемом ListView#setItemsCanFocus(boolean). Если вы хотите, чтобы отдельные представления в элементе списка фокусировались так, чтобы пользователь мог взаимодействовать с ними по отдельности, а не с элементом списка в целом, вызывайте его, передавая true. false - это поведение по умолчанию.

Поведение по умолчанию, при котором ListView управляет фокусом элемента и щелчками, по сути является ярлыком / оптимизацией для общего случая, когда весь элемент действует как единое целое с точки зрения взаимодействия, но его расположение может быть сложным. Когда вы говорите ListView, что его элементы могут фокусироваться, он отключает это специальное поведение, и вам следует использовать более традиционные механизмы обработки событий в представлениях в элементах списка. (Слушатели, переопределены на * методы и т. Д.)

Но почему ваши элементы списка перестают принимать щелчки, когда ваш ListView не настроен для фокусируемых элементов? ListView будет генерировать события щелчка элемента, только если представление элемента списка возвращает false из View#hasFocusable(). Это означает, что никакие дочерние элементы элемента списка не могут быть сфокусированы, если вы хотите получать для него события щелчка элемента. Как только ваша кнопка становится видимой, элемент списка имеет фокусируемый дочерний элемент и больше не будет получать события щелчка элемента списка.

...