天天看点

【Android-基础】事件处理方式,Android的监听以及Android的回调【Android-基础】前言一、基于监听的二、基于回调的总结

【Android-基础】

点击进入【Android-基础】的目录,获得更多学习资源

文章目录

  • 【Android-基础】
  • 前言
  • 一、基于监听的
  • 二、基于回调的
  • 总结

前言

在Android开发中,不可避免的要涉及到

交互

,可能是人机之间的交互,也可能是组件之间的交互。总之,一个app不可能是一成不变的,只要有变化,就需要用触发这个变化的条件以及变化的效果,这个就是

事件

存在意义。

或者可以说,

事件就是为了解决交互这一问题而产生的

android中的事件处理有两种:

基于监听的、基于回调的。

一、基于监听的

为UI组件绑定事件监听器:

事件监听器绑定到事件源(UI组件)–>外部动作–>事件源(UI组件)–>事件–>事件监听器处理

根据上面的流程,可以分离出三个对象:

事件监听器、事件源、事件。

说这么多理论没有意义,直接举个例子就懂了。

关于“基于监听的”最简单的例子就是:

按钮的点击事件监听

事件监听器就是你的

Listener

,事件源就是你的

UI组件:按钮

,事件就是

点击

。这样是不是就能很清晰的理解“基于监听的”事件处理机制了。

二、基于回调的

方式就是重写(比如重写android组件的回调方法):

下面举例重写activity的回调方法

举例:

public class TestActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        System.out.println("按下了按键");
        return super.onKeyDown(keyCode, event);
    }
}
           

代码的简单解释:

利用回调监听物理按键的时候,android为每一个按键都定义了一个int常量,只需判断其

KeyCode是不是等于按键对应的常量即可。

比如“返回键”的常量是:KEYCODE_BACK

在activity的onKeyDown回调方法中,通过if判断其参数keyCode==KEYCODE_BACK就知道

当前是否按下的是“返回键”

一个不怎么引人注意的点

不知你是否注意到onKeyDown这个方法返回的是一个Boolean值。

正常情况下,当你点击屏幕会触发两个监听:触摸监听和点击监听。

但是触摸监听的事件处理方法是有一个布尔类型的返回值的,这个返回值的意义就是:

是否完全消耗这个交互

当返回的是true的时候,代表触摸这个动作已经完全消耗这个交互了,所以点击这个动作

就不会被触发,就不会再去执行点击监听。

当返回的是false,还会继续去执行点击的监听。

这个值得留意,因为曾经因为不知道这个,写了一堆废代码,算是一个坑吧,这里贴出来,也算是一个总结。

总结

这两种事件的处理机制,究竟如何选用,主要还是看具体的业务,比如,就是一个简单的按钮被点击,被长按等等这种事件,用“基于监听的”机制是比较容易的。

但是如果是

程序运行中触发了某些条件

,比如业务中某个类被加载了,我需要在加载这个类之后,做一些事情,这时候就可以使用

“基于回调的”机制。

概括来说:

基于回调的方式,用来处理一些通用的事件;

特定的某些情况下,比如某些UI组件的事件处理,就用基于监听的。