Android的事件处理之基于监听的事件处理

时间:2024-03-13 09:44:35

当用户在程序界面上执行各种操作时,应用程序必须为用户动作提供相应动作,这种响应动作就需要通过事件处理来完成
Android提供了两种事件处理机制:

  • 基于监听的事件处理
  • 基于回调的事件处理

这篇博客讲为大家详细讲解第一种基于监听的事件处理


在事件监听的处理模型中,主要涉及如下三类对象:

  • 事件源:事件发生的各个场所,通常就是指各个组件,如按钮,编辑框,文本框等
  • 事件:事件封装了界面组件上发生的特定事件
  • 事件监听器:负责监听事件源发生的事件,并对各种事件作出相应

在程序中实现事件监听器,通常有如下几种方式:

  • 内部类形式:将事件监听器类定义成当前类的内部类
  • 外部类形式:将事件监听类定义成一个外部类
  • Activity本身作为事件监听器类:让Activity本身实现监听接口,并实现事件处理方法
  • 匿名内部类:使用匿名内部类创建事件监听对象

    1.内部类作为事件监听类

    程序定义了一个View.OnClickListener实现类,这个实现类将会作为事件监听器使用
    Android的事件处理之基于监听的事件处理

使用内部类可以在当前类中复用该监听类,并且可以*访问外部类中的所有界面组件,这是使用内部类的两个优势

2.外部类作为事件监听类

使用外部类定义事件监听类的形式比较少见,主要由于

  • 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性
  • 外部类形式的事件监听器不能*访问创建GUI界面的类中的组件,编程不够简洁

    Android的事件处理之基于监听的事件处理

Android的事件处理之基于监听的事件处理
当用户长按单击界面中的bn按钮时,程序将会触发SimListener监听器,该监听器里包含的事件处理方法将会运用Toast显示提示信息框

3.Activity本身作为事件监听类

Android的事件处理之基于监听的事件处理

上面代码让Activity类实现了OnclickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(View v),当为某组件添加该事件监听器时,直接使用this作为事件监听器对象即可

4.匿名内部类作为事件监听器

这种形式是目前使用最广泛的事件监听器形式
Android的事件处理之基于监听的事件处理

5.直接绑定到标签

Android还提供一种更加简单的绑定事件监听器的方式,那就是直接在界面布局文件中文为制定标签绑定事件处理方法

Android的事件处理之基于监听的事件处理
上面代码为Button按钮绑定了一个事件处理方法click

Android的事件处理之基于监听的事件处理

上面代码定义了对应的click(View source)方法,当程序中的bn按钮被单击时,该方法会被激发

总的来说:

内部类:使用内部类作为事件监听器,可以在当前类中重复使用,另外,由于监听器是外部类的内部类,所以可以*访问外部类的所有界面组件

外部类,外部类作为事件监听器的情况比较少见,但是如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是用来完成某种业务逻辑的实现,则可以考虑是用外部类的形式来定义事件监听器类。

Activity作为事件监听器:这种做法虽然形式简单,但是有两个缺点
1.造成程序的混乱,Activity的主要作用是完成初始化界面的工作,但是此时居然还要包含时间处理方法,可能会引起混乱
2.Activity实现监听器接口,那么他给开发者的感觉会比较奇怪
绑定到组件事件属性:这种在界面中绑定组件的方式比较直观

因此,最常使用的是最后两种 —— 匿名内部类作为事件监听器类直接绑定到标签,用户可以根据自己的编码需求选择不同的方式实现事件监听