Android事件处理机制
事件处理机制
Android提供了两套事件处理机制:
- 基于监听的事件处理
这种事件处理方式就是给Android UI控件绑定特定的事件监听器。 - 基于回调的事件处理
这种事件处理方式就是重写Android UI控件的特定事件的回调方法,或者重写Activity特定的回调方法。
注:推荐使用基于回调的事件处理,特殊情况下,只能使用基于监听的事件处理。
基于监听的事件处理机制
事件监听机制是由事件源、事件、事件监听器三类对象组成的,下面我们通过一张图来阐述三者之间的关系以及基于监听的事件处理机制的一般流程图:
- 为某个组件(事件源)设置一个监听器,用于监听用户的操作
- 用户的操作触发组件的监听器
- 生成了对应的事件对象
- 将这个组件对象作为参数传给事件监听器
- 事件监听器对事件对象进行判断,执行对应的事件处理器
事件监听机制是一种委派式的事件处理机制,事件源事件处理委托给事件监听器,当事件源发生指定事件时,就通知指定事件监听器,执行相应的操作。
五种不同的使用方式
给一个UI控件或Actvity添加基于监听的事件的方法有五种:
- 直接使用匿名内部类(推荐):直接使用匿名类调用
setXxxListener()
并重写方法 - 使用内部类:添加一个事件内部类,然后实例化一个对象传递给
setXxxListener()
作为对象,这种方法可以复用该事件类,而且可以直接访问外部类的所有界面组件 - 使用外部类:另创一个Java文件实现事件类,很少用,因为外部类不能直接访问用户界面类中的组件,要通过构造方法将组件传入使用,会导致代码不整洁
- 直接使用Activity作为事件监听器(常用):让
Activity
类实现XxxListener
实现事件监听接口,然后在Activity
中定义重写对应的事件处理器方法,最后调用setXxx.Listener(this)
,例如OnClickListener
重写onClick(view)
方法 - 直接绑定到标签:在xml布局文件中对应的Activity中定义一个事件处理方法
public void msClick(View source)
source 对应事件源( UI 控件类型),接着布局文件中对应要触发事件的 UI 控件设置一个属性
android:onclick = "msClick