永远不会调用父视图的OnLongClickListener。怎么触发它?

时间:2014-01-05 00:30:52

标签: android

我有一个父级线性,它是自定义控件的容器视图,它是第三方组件。 我认为子(第三方组件)覆盖或以某种方式使用OnTouchListener用于他的目的,并且由于这个原因,即使正确设置,也不会以某种方式触发父OnLongClickListener。甚至永远不会触发子项的OnLongClickListener。 我不想进入第三方组件并为我的目的进行特别的更改,但如果我长时间点击他的区域,即使孩子正在做他的工作,也有不同的方法来触发容器的OnLongClickListener。我是父母,我认为父母应该教育他们的孩子!

1 个答案:

答案 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);
    }

}