我有一个布局的背景是一个选择器的TextView。 TextView的文本被设置为从HTML生成。 然后我用LinkMovementMethod设置TextView。如何在Android上将视图的onClick事件传递给其父项?
现在,当我点击TextView时,单击事件不会发送到其父布局以触发选择器。
这应该如何解决?
我有一个布局的背景是一个选择器的TextView。 TextView的文本被设置为从HTML生成。 然后我用LinkMovementMethod设置TextView。如何在Android上将视图的onClick事件传递给其父项?
现在,当我点击TextView时,单击事件不会发送到其父布局以触发选择器。
这应该如何解决?
我认为你需要使用这些方法之一,以便能够截获该事件之前被发送到相应的组件:
Activity.dispatchTouchEvent(MotionEvent)
- 这允许你的活动,以拦截所有触摸事件,他们是前发送到窗口。
ViewGroup.onInterceptTouchEvent(MotionEvent)
- 这允许ViewGroup在事件被分派到子视图时观察事件。
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- 在父视图中调用此函数以指示不应使用onInterceptTouchEvent(MotionEvent)拦截触摸事件。
更多信息here。
希望有所帮助。
声明你TextView
不可点击/可聚焦使用android:clickable="false"
和android:focusable="false"
或v.setClickable(false)
和v.setFocusable(false)
。点击事件现在应该发送给TextView
的父母。
注:
为了实现这个,你必须点击添加到其直接parent
。或将 android:clickable="false"
和android:focusable="false"
设置为其直接父母以将听众传递给进一步的父母。
哦,如果我能给这个+100我会。一直试图弄清楚如何使一个点击只能在ViewPager中工作,而不是在使用TouchImageView实现onTouch的适配器布局中!这个解决方案像一个魅力。 – JPM 2013-12-23 18:59:07
完美地工作。比例外答案好得多。 – Rooster242 2014-06-16 19:04:43
但如果我想处理EditText的Focus change事件呢? – 2015-01-28 09:15:34
有时只有这有助于:
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);
把
儿童android:duplicateParentState="true"
则意见得到它绘制状态(集中,按下等)从它的直接父母而不是从它自己。 你可以为父母设置onclick,它可以点击孩子的号码
如果你的TextView
创建点击问题,而不是从你的xml文件中删除android:inputType=""
。
我不知道为什么,但是这对我来说是诀窍。谢谢! – 2018-02-25 10:51:50
是否有更简单的方法来传递事件以在父视图中触发onClick和onLongClick,或者我必须自己实现它们? – shiami 2010-12-12 13:59:40
看看这个:http://stackoverflow.com/questions/2136696/pass-event-to-parent-view 可能你可能想尝试传递相同的点击侦听器到其他实例的建议,即使我不'不知道它是否会奏效,但可能值得一试。 – 2010-12-12 16:58:10
下面的答案是更清洁 – JPM 2013-12-23 19:00:24