【问题标题】:Android Event PropagationAndroid 事件传播
【发布时间】:2023-03-29 22:36:02
【问题描述】:

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

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

【问题讨论】:

  • 您可以尝试使用 OnClickListener 而不是 OnTouchListener..
  • 这是一个理论问题。我正在尝试确认文档中概述的行为。此外,onClick 与这种情况无关,因为该侦听器不需要返回值。

标签: android android-ui android-event


【解决方案1】:

事件从父视图传播到子视图。永远不要同级视图。

如果您的 clearButton 在 submitButton 内,您正在尝试的操作会起作用(女巫甚至不可能)。

你可以用performClick()模仿这种行为

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2014-08-14
    • 1970-01-01
    • 2010-09-20
    • 2015-04-14
    相关资源
    最近更新 更多