onClickListener для LinearLayout - PullRequest
28 голосов
/ 25 января 2010

У меня небольшая проблема с функциональностью, которую я хотел бы реализовать.

У меня есть LinearLayout, содержащий 2 TextViews. Я бы хотел установить onClickListener на него, чтобы он вел себя как элемент в ListView.

Я попробовал возможную реализацию этого, и он заработал, используя атрибут xml android:onClick LinearLayout.

Поскольку я хочу, чтобы приложение визуально реагировало на нажатие LinearLayout (как в ListView), я поместил это в метод обратного вызова слушателя:

l.setBackgroundColor(android.R.drawable.list_selector_background);

l - это объект LinearLayout, инициализированный с findViewById();

Приложение не отвечает, когда я пытаюсь щелкнуть макет. Я попытался заменить код в методе обратного вызова появлением сообщения Toast, и это работает, поэтому я предполагаю, что проблема в setBackgroundColor.

Кто-нибудь знаком с этим?

PS: извините, я не могу опубликовать больше кода прямо сейчас, я на работе.

Ответы [ 5 ]

62 голосов
/ 26 января 2010

Вы должны установить атрибут LinearLayout android:clickable="true" в файле макета xml или setClickable(true) в коде активности java.

5 голосов
/ 19 мая 2013

я заметил, что все приведенные выше советы не помогают, пока любой из дочерних элементов внутри LinearLayout имеет атрибут android: textIsSelectable = "true".

3 голосов
/ 05 мая 2012

Я обнаружил, что этот setClickable (true) все равно будет вызывать клики для дочерних элементов линейного макета. Я обнаружил, что для того, чтобы LinearLayout захватывал касание вместо его дочерних элементов, мне пришлось переопределить метод dispatchTouchEvent, поэтому я создал подкласс LinearLayout именно для этой цели. Похоже, уродливое решение.

2 голосов
/ 25 января 2013

Вы должны установить фокусировку LinearLayout в true и установить фокусировку всех дочерних представлений в false, не используйте android: clickable = "true", но вы не можете видеть эффект от щелчка линейного размещения. Кстати, лучший способ - реализовать API onTouchEvent.

0 голосов
/ 15 сентября 2015

У меня была такая же проблема, я пытался в течение часа все ответы в SO, но ни один не работал.

Тогда я понял, что мне просто нужно продвинуть мой LinearLayout в конец макета , так как другие представления заблокировали его, и затем он работал, без добавления ЛЮБЫХ специальных атрибутов к макету .

Поместите это здесь на случай, если это когда-нибудь может кому-то помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...