一.基于监听的事件处理
在事件监听的处理模型中,主要涉及如下三类对象:
Event Source(事件源):事件发生的场所,通常是各个组件。
Event(事件):事件封装了界面组件上发生的特定的事情。
Event Listener(事件监听器):负责监听事件源所发出的事件,并对各事件做出相应的响应。
基于监听的事件处理模型编程步骤如下:
1.获取普通界面组件(事件源),也就是被监听的对象。
2.实现事件监听器类,该监听器是一个java类,必须实现一个XxxListener接口。
3.调用事件源的setXxxListener方法将事件监听器对象注册给普通组件(事件源)。
在程序中实现事件监听,通常有以下几种方式:
1.内部类形式:将事件监听器类定义成当前的内部类。
2.外部类形式:将事件监听器类定义成一个外部类
3.Activity本身作为事件监听器类:让Activity本身实现监听接口,并实现事件处理方法。
4.匿名内部类:使用匿名内部类创建事件监听对象
5.直接绑定到标签:直接在界面布局文件中为指定标签绑定事件处理方法。
Android的事件处理机制是一种委派式事件处理方式
二.基于回调的实践处理
对于基于回调的事件处理模型来说,事件源与事件监听器是统一的,或者说事件监听器完全消失了。当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件。
View包含的事件处理的回调方法:
Boolean onKeyDown(int keyCode, KeyEvent event):当用户在该组件上按下某个键是触发。
Boolean onKeyLongPress(int keyCode, KeyEvent event):当用户在该组件上长按某个键时触发。
Boolean onKeyUp(int keyCode, KeyEvent event):当用户在该组件上松开某个键时触发。
Boolean onTouchEvent(MotionEvent event):当用户在该组件上触发触摸屏幕事件时触发。
Boolean onTrackballEvent(MotionEvent event):当用户在该组件上触发轨迹球屏事件时触发。
基于回调的事件传播:
如果处理事件的回调方法返回true,表明该处理方法已完全处理该事件,该事件不会传播出去。
如果处理事件的回调方法返回false,表明该处理方法并未完全处理该事件,该事件会传播出去。
基于回调的实践处理机制可通过自定义View来实现,自定义View时重写该View的事件处理方法即可。