欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Android基本功:事件处理

来源: 开发者 投稿于  被查看 37497 次 评论:207

Android基本功:事件处理


一、事件概述

当用户在程序界面上执行各种操作时,应用程序必须为用户动作提供响应动作,这种响应动作需要通过事件处理来完成。Andorid提供了强大的事件处理机制,包括两套事件处理机制:

基于监听的事件处理:为Android界面组件绑定特定的事件监听器;

基于回调的事件处理:重写Android组件特定的回调方法,或者重写Activity的回调方法;

注意:Android还允许在界面布局文件中为UI组件的android:onClick属性指定事件的监听方法,开发者需要在Activity定义该事件监听方法,有一个View类型参数,代表单击的组件;

二、基于监听的事件处理

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

Event Sources(事件源):事件发生的场所,指各个组件;

Event(事件):封装了界面组件上发生的特定事件,一般通过Event对象来取得;

Event Listener(事件监听器):监听事件源发生的事件,并对各个事件做出相应的响应;

基于事件监听的事件处理模型编程步步骤如下:

获取普通界面组件(事件源),也就是被监听的对象;

实现事件监听器类,该监听器类是一个特殊的Java类,必须事件一个XxxListener接口;

调用事件源的setXxxListener方法将事件监听器对象注册给普通组件(事件源);

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

内部类形式:将事件监听器类定义成当前类的内部类;

外部类形式:将事件监听类定义成一个外部类;

通常属于特定的GUI界面,不利于提高程序的内聚性;

不能自由访问创建GUI界面的类中的组件,编程不够简洁;

Activity本身作为事件监听类:让Activity本身实现监听器接口,并实现事件处理方法;

Activity的主要职能应该是完成界面的初始化工作,造成程序结构混乱;

Activity实现监听器接口,感觉怪异;

匿名内部类:使用匿名内部类创建事件监听器对象;

大部分事件监听知识临时使用一次,所以使用匿名内部类更合适;

直接绑定到标签:android:onClick属性和xxx(View source)的方法;

三、基于回调的事件处理

对于基于回调的事件处理模型来说,事件源和事件监听器是统一的。为了实现回调机制地事件处理,Android为所有的GUI组件提供了一些事件处理方法,以View为例:

boolean onKeyDown(int keyCode,KeyEvent event):在该组件上按下某个键时触发的方法;

boolean onKeyLongPress(int keyCode,KeyEvent event):在该组件上长按某个键时触发的方法;

boolean onTouchEvent(MotionEvent event):在该组件上触摸屏事件时触发的方法;

几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用户标识该处理方法是否能完全处理该事件:

返回true,已完全处理,不会传播下去;

返回false,未完全处理,会传播下去;

Android系统最先触发的应该是该按键上绑定的事件监听器(Listener),接着才触发该组件提供的事件回调方法(MyButton),然后还会传播到该组件所在的Activity(Activity)。

用户评论