事件处理:
Android 提供了两种方式来进行事件处理:一是基于监听的事件处理,二是回调的事件处理
第一种:基于监听的事件处理
类似与AWT,Swing编程,监听的处理模型仍然是三类对象:事件源,事件,事件监听器
Andioid 的事件处理机制是一种委派式事件处理模式:普通组件(事件源)将整个事件封装成对象委托给特定的对象(事件监听器)进行处理;事件源发生指定事件时就通知指定的事件监听器来监听处理事件
每个组件对于特定事件可以指定一个或多个监听器,一个监听器也可监听不同事件源。
编程步骤:
1.获取普通界面组件(事件源),也就是被监听的对象
2.实现事件监听器类,类似XxxListener接口
3.调用事件源的setXxxListener方法将事件监听器对象注册给普通组件
程序中实现事件监听器:
1.内部类
2.外部类
3.Activity 本身作为事件监听器
4匿名内部类形式(推荐)
PS: 一般不推荐将业务逻辑实现写在事件监听器中,显示逻辑和业务逻辑的混合将增加程序后期维护难度。如果有多个监听器需要实现相同的业务逻辑,可以考虑使用业务逻辑组件来定义业务逻辑功能。
另:Android还有“直接绑定到标签”的事件监听方式。对于Android 界面的组件标签,都支持OnClick属性,属性名就是形如xxx(View source)的方法的方法名,然后在相应的界面布局对应的Activity定义一个void xxx(View source)方法就行了
第二种:回调的事件处理
当用户在GUI 组件上激发某个事件时,组件自己特定的方法将会负责处理该事件。是一种事件源与事件监听器相结合的机制。
编程步骤:
1.自定义类继承要实现回调处理的GUI 组件类 例如:public class mybutton extends Button{}
2.重写该类的事件处理方法 例如: public boolean onKeyDown(int keyCode,KeyEvent event){}
3.然后就可在界面布局文件使用该组件,系统会自动处理特定事件 例如:<com.lin.mybutton 安卓平常的设置属性。。。。/> 注意此时一定要用全包名
注意:基于回调的事件传播。如果在重写事件处理时,一般都需要返回一个boolean 值, 该值代表此事件是否被完全被处理,如果为false ,那么该事件会传播给其他组件,例如Activity .
一般来说:事件触发顺序为:优先绑定的监听器,然后是该组件的回调事件,最后才是Activity 回调事件。如果能传播的话。