Подтвердить что ты не робот

OnClickListener на LinearLayout

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

У меня есть 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: извините, я не могу опубликовать больше кода прямо сейчас, я на работе.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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