当用户在程序界面上执行各种操作时,应用程序必须为用户动作提供相应动作,这种响应动作就需要通过事件处理来完成
Android提供了两种事件处理机制:
- 基于监听的事件处理
- 基于回调的事件处理
这篇博客讲为大家详细讲解第一种基于监听的事件处理
在事件监听的处理模型中,主要涉及如下三类对象:
- 事件源:事件发生的各个场所,通常就是指各个组件,如按钮,编辑框,文本框等
- 事件:事件封装了界面组件上发生的特定事件
- 事件监听器:负责监听事件源发生的事件,并对各种事件作出相应
在程序中实现事件监听器,通常有如下几种方式:
- 内部类形式:将事件监听器类定义成当前类的内部类
- 外部类形式:将事件监听类定义成一个外部类
- Activity本身作为事件监听器类:让Activity本身实现监听接口,并实现事件处理方法
匿名内部类:使用匿名内部类创建事件监听对象
1.内部类作为事件监听类
程序定义了一个View.OnClickListener实现类,这个实现类将会作为事件监听器使用
使用内部类可以在当前类中复用该监听类,并且可以自由访问外部类中的所有界面组件,这是使用内部类的两个优势
2.外部类作为事件监听类
使用外部类定义事件监听类的形式比较少见,主要由于
- 事件监听器通常属于特定的GUI界面,定义成外部类不利于提高程序的内聚性
外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁
当用户长按单击界面中的bn按钮时,程序将会触发SimListener监听器,该监听器里包含的事件处理方法将会运用Toast显示提示信息框
3.Activity本身作为事件监听类
上面代码让Activity类实现了OnclickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(View v),当为某组件添加该事件监听器时,直接使用this作为事件监听器对象即可
4.匿名内部类作为事件监听器
这种形式是目前使用最广泛的事件监听器形式
5.直接绑定到标签
Android还提供一种更加简单的绑定事件监听器的方式,那就是直接在界面布局文件中文为制定标签绑定事件处理方法
上面代码为Button按钮绑定了一个事件处理方法click
上面代码定义了对应的click(View source)方法,当程序中的bn按钮被单击时,该方法会被激发
总的来说:
内部类:使用内部类作为事件监听器,可以在当前类中重复使用,另外,由于监听器是外部类的内部类,所以可以自由访问外部类的所有界面组件
外部类,外部类作为事件监听器的情况比较少见,但是如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是用来完成某种业务逻辑的实现,则可以考虑是用外部类的形式来定义事件监听器类。
Activity作为事件监听器:这种做法虽然形式简单,但是有两个缺点
1.造成程序的混乱,Activity的主要作用是完成初始化界面的工作,但是此时居然还要包含时间处理方法,可能会引起混乱
2.Activity实现监听器接口,那么他给开发者的感觉会比较奇怪
绑定到组件事件属性:这种在界面中绑定组件的方式比较直观
因此,最常使用的是最后两种 —— 匿名内部类作为事件监听器类 和 直接绑定到标签,用户可以根据自己的编码需求选择不同的方式实现事件监听