我有一个父级线性,它是自定义控件的容器视图,它是第三方组件。 我认为子(第三方组件)覆盖或以某种方式使用OnTouchListener用于他的目的,并且由于这个原因,即使正确设置,也不会以某种方式触发父OnLongClickListener。甚至永远不会触发子项的OnLongClickListener。 我不想进入第三方组件并为我的目的进行特别的更改,但如果我长时间点击他的区域,即使孩子正在做他的工作,也有不同的方法来触发容器的OnLongClickListener。我是父母,我认为父母应该教育他们的孩子!
答案 0 :(得分:0)
如果内部视图正在使用触摸事件,那么它们将不会返回到您的容器,这就是您的点击侦听器无法正常工作的原因。
您可以通过实现自定义容器并覆盖其上的dispatchTouchEvent()
方法,并从那里调用超级实现和onTouchEvent()
方法来覆盖它。这应该使您的点击侦听器工作。
以下是容器的代码,您可以在LinearLayout
的位置使用
public class ClickHandlingLinearLayout extends LinearLayout {
private boolean touchEventCalled;
public ClickHandlingLinearLayout(Context context) {
super(context);
}
public ClickHandlingLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ClickHandlingLinearLayout(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
boolean isHandled = super.dispatchTouchEvent(ev);
if (isHandled && !touchEventCalled) {
onTouchEvent(ev);
}
touchEventCalled = false;
return isHandled;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
touchEventCalled = true;
return super.onTouchEvent(event);
}
}