Как передать событие onClick представления его родителю на Android?
У меня есть TextView в макете, чей фон является селектором. И текст TextView имеет значение Spanned из HTML. Затем я устанавливаю TextView с LinkMovementMethod.
теперь, когда я нажимаю на TextView, событие click не отправляется в родительский макет для запуска селектора.
Как это должно решаться?
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 для родителя, и он вызовет дочерний щелчок
если вы хотите
OnTouch
иOnClick
слушатель для родительского и дочернего просмотра обоих, пожалуйста, используйте ниже трюк:
пользователь ScrollView в качестве родительского представления и внутри, который поместил ваш дочерний вид внутри Relative / LinearLayout.
Сделать Родительский ScrollView
android:fillViewport="true"
поэтому просмотр не прокручивается.затем установить
OnTouch
слушатель к родителю иOnClick
прослушиватель дочерних представлений. И наслаждайтесь обоими слушателями обратный вызов.