andorid中基于回调事件传播返回true与false的区别

事件处理分为基于监听机制和基于回调的事件传播,监听事件大部分没有返回值,基于回调的事件传播j几乎都有boolean类型返回值

该返回值用于标识该处理方法能否完全处理该事件。

1: 如果事件处理的回调方法返回true,表明该处理方法已完全处理该事件,该事件不会传播出去。

2:如果事件处理的回调方法返回false,表明该处理方法并未完全处理该事件,该事件会传播出去的。

对于基于回调的事件传播而言,某组件上所发生的事情不仅激发该组件的回调方法,也会触发该组件所在activity的回调

方法——只要事件能传播到该activity.


下面以实例来分析:

首先自定义Button,并且在MyButton中重写了onKeyDown()回调方法,return false

public class MyButton extends Button {
    public MyButton(Context context) {
        super(context);
    }
    public MyButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override

    //返回false,表明并未完全处理该事件,该事件依然向外扩散

    public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            Log.i("msg","touch is in myButton");
        }
        return false;
    }
}


Activity的代码如下:

在该activity中为该button绑定事件监听器,并且重写了onKeyDown()

public class BackActivity1Activity extends Activity {
     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button button1=(Button) findViewById(R.id.mybutton);
            button1.setOnTouchListener(new OnTouchListener() {

                @Override

            //返回false,表明该事件向外传播

                public boolean onTouch(View v, MotionEvent event) {
                    if(event.getAction()==MotionEvent.ACTION_DOWN){
                        Log.i("msg","touch is in listenner");
                    }
                    return false;
                }
            });
        }

        @Override

        //返回false,表明并未完全处理该事件,该事件依然向外扩散

        public boolean onTouchEvent(MotionEvent event) {
             super.onTouchEvent(event);
             if(event.getAction()==MotionEvent.ACTION_DOWN){
                 Log.i("msg","touch is in activity");
             }
             return false;
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
}


最后所得的结果是:


由此不难看出,当该组件上发生某个按键被按下的事件时,Android系统最先触发的应该是该按键上绑定的事件监听器

接着才触发该组件提供的事件回调方法,然后还会传播到该组件所有的Activity,但如果我们让任何一个事件处理方法返回true

那么该事件将不会继续向外传播。

如果我们将事件监听器中的return false,改为return true.那么执行结果如下:

如果将MyButton中设置为return true,结果是:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值