Android事件传播

时间:2013-06-18 06:05:55

标签: android android-ui android-event

Android输入事件文档here似乎暗示在事件侦听器中返回false将导致事件继续发送到其他侦听器。例如

OnTouchListener touchListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // should continue on to other views
    return false;
    }
};

问题是如果我在同一个布局中有两个按钮并且我点击一个我希望事件继续到所有视图,因为我返回false,例如:

    Button submitButton = (Button) findViewById(R.id.submit_button);
    submitButton.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("--> submitButton");
            return false;
        }

    });

    Button clearButton = (Button) findViewById(R.id.clear_button);
    clearButton.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("--> clearButton");
            return false;
        }

    });

由于提交按钮的监听器返回false,我希望将点击结果发送到清除按钮,但输出始终为:

--> submitButton
--> submitButton

有人可以解释事件是如何在视图中传播的,因为我似乎误解了这篇文章吗?

1 个答案:

答案 0 :(得分:1)

事件从父视图传播到子视图。永远不要兄弟姐妹的观点。

如果你的clearButton在submitButton中(甚至不可能),你正在尝试的是什么。

您可以使用performClick()

模仿该行为