OnClickListener на LinearLayout

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

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

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

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

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

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

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

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

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

Solutions Collecting From Web of "OnClickListener на LinearLayout"

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

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

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

Вы должны установить значение LinearLayout в true и установить фокусное изображение для детей в false, не использовать андроид: clickable = "true", но вы не можете увидеть эффект щелчка linelayout. BTW, лучший способ – реализовать onTouchEvent api.

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

Затем я понял, что мне просто нужно продвинуть LinearLayout в нижней части макета , поскольку другие виды блокировали его, а затем он работал без добавления каких-либо специальных атрибутов в макет .

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