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


У меня есть TextView в макете, чей фон является селектором. И текст TextView имеет значение Spanned из HTML. Затем я устанавливаю TextView с LinkMovementMethod.

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

Как это должно решаться?

6 77

6 ответов:

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

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

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

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

дополнительная информация здесь.

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

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

Примечание:

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

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

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);

Put

android:duplicateParentState="true"

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

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

если вы хотите OnTouch и OnClick слушатель для родительского и дочернего просмотра обоих, пожалуйста, используйте ниже трюк:

  1. пользователь ScrollView в качестве родительского представления и внутри, который поместил ваш дочерний вид внутри Relative / LinearLayout.

  2. Сделать Родительский ScrollView android:fillViewport="true" поэтому просмотр не прокручивается.

  3. затем установить OnTouch слушатель к родителю и OnClick прослушиватель дочерних представлений. И наслаждайтесь обоими слушателями обратный вызов.