Как передать событие onClick родителям на Android?

У меня есть TextView в макете, который представляет собой селектор. И текст TextView установлен в Spanned из HTML. Затем я установил TextView с помощью метода LinkMovementMethod.

Теперь, когда я нажимаю на TextView, событие click не отправляется на родительский макет для запуска селектора.

Как это можно решить? Спасибо!

Ответ 1

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

Activity.dispatchTouchEvent(MotionEvent) - Это позволяет вашей Деятельности перехватывать все события касания до того, как они будут отправлены в окно.

ViewGroup.onInterceptTouchEvent(MotionEvent) - Это позволяет ViewGroup просматривать события по мере их отправки в дочерние представления.

ViewParent.requestDisallowInterceptTouchEvent(boolean) - вызвать это на родительском представлении, чтобы указать, что он не должен перехватывать события касания с помощью onInterceptTouchEvent (MotionEvent).

Подробнее здесь.

Надеюсь, что это поможет.

Ответ 2

Объявите TextView не clickable/focusable с помощью android:clickable="false" и android:focusable="false" или v.setClickable(false) и v.setFocusable(false). События кликов теперь должны отправляться родительскому элементу TextView.

Примечание:

Чтобы достичь этого, вы должны добавить клик к его прямой parent. или установить android:clickable="false" и android:focusable="false" к его непосредственному родительскому , чтобы передать слушателю дополнительный родительский.

Ответ 3

Иногда только это помогает:

View child = parent.findViewById(R.id.btnMoreText);
    child.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            View parent = (View) v.getParent();
            parent.performClick();
        }
    });

Другой вариант, работает не всегда:

child.setOnClickListener(null);

Ответ 4

Помещенный

android:duplicateParentState="true"

в потомке, тогда представления получают свое выталкиваемое состояние (сфокусированное, нажатое и т.д.) от его прямого родителя, а не от самого себя. вы можете установить onclick для родителя, и он вызывает дочерний щелчок

Ответ 5

Если ваш TextView создает проблемы с кликом, чем удаляет android:inputType="" из вашего xml файла.