Как передать событие 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 файла.