Android: несколько действий в виде списка - проблема с фокусом - PullRequest
9 голосов
/ 01 февраля 2009

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

Если вы можете посмотреть @ DroidRecord, у них схожая компоновка, которую я хочу достичь.

Спасибо!

Крис.

Ответы [ 6 ]

9 голосов
/ 04 мая 2010

Как сказал Мариано Камп, добавление кнопок в строку сделает ее «неприкасаемой», но, по моему опыту, эта проблема исчезнет, ​​если вы установите эти свойства для кнопок:

    android:focusable="false"
    android:focusableInTouchMode="false"

См. Также Как запустить onListItemClick в Listactivity с кнопками в списке?

6 голосов
/ 22 июня 2011

Другой возможный обходной путь - вы можете использовать ImageView вместо кнопки и установить onClickListener в ImageView (например, когда вы надуваете представление ячейки).

ImageView не фокусируется, поэтому он не препятствует отправке OnListItemClick (), а при нажатии на изображение запускается только прослушиватель изображения.

4 голосов
/ 01 февраля 2009

какой у вас вопрос? Как добавить кнопку в строку списка?

Очень просто, так как вы ожидаете, что он будет добавлен в макет строки.

К сожалению, это также сделает весь ряд «неприкасаемым». Разработчик Google, которого я спросил, сказал, что это сделано специально (насколько я помню), и что вы должны использовать TouchDelegate, чтобы справиться с этим. Поскольку нет примеров, даже в исходниках Android, и только очень тонкая документация , которая не работала для меня

В любом случае, похоже, что не многие приложения используют кнопку в строке списка. Я знаю только мои ( newsrob , см. Список статей) и Будильник. Может быть, вы могли бы использовать контекстное меню?

В противном случае уродливым решением было бы добавить вызов setOnClickListener () для вашего представления строки в методе getView.

Приветствия

1 голос
/ 02 февраля 2009

Это не ответ на ваш вопрос, но длинный щелчок / вкладка - это обычно место для всплывающего контекстного меню и добавления дополнительных действий, таких как удаление. Вы можете прочитать, как это сделать, здесь: Как реализовать контекстное меню в ListActivity на Android?

0 голосов
/ 23 апреля 2013

Я пытался это нажимать на кнопки, но у меня это не получалось андроид: фокусируемый = «ложь» андроид: focusableInTouchMode = "ложь"

так что я сделал, чтобы изменить макет активности на scrollview, а затем добавить linerLayout внутри него. После этого вы можете добавить кнопки в макет, и каждая кнопка будет активна.

0 голосов
/ 12 декабря 2011

Я хотел бы поблагодарить BoD за подсказку об удалении состояния focusable для кнопки (ей), это спасло мой день.

Но для информации, поскольку кнопка больше не focusable - state_focused в xml -, ее дизайн больше не будет отображаться пользователю.

Эти кнопки все равно получат состояние pressed, но также и при нажатии в любом месте родительского представления (в любом месте, НО другая кнопка)!

Имейте это в виду, это не может быть хорошим решением для вашего собственного случая, но оно работает хорошо.

...