Android的事件处理模式

By | 03月03日
Advertisement

Android的事件处理模式有两种:
基于监听的事件处理模式 & 基于回调的事件处理模式

1.基于监听的事件处理模式,这个比较简单,实现方法是
应用,内部类/内部匿名类/外部类/Activity本身实现监听接口作为事件监听器类,
或者直接绑定到标签五种方式。前四个大同小异,现在简单说下最后一种

对应很对Android标签而言,它们都支持onClick、onLongClick等属性,这种属性
的属性值就是一个形如xxx(View source)的方法的方法名。
例如在xml文件中有如下标签:

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click me"
android:onClick="clickHandler"/>
这就意味着需要在该界面布局对应的Activity中定义一个
void clickHandler(View source)方法,该方法将会负责处理该按钮上的单击事件。

2.基于回调的事件处理模式
回调模式在当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件。
为了使用回调机制类处理GUI组件上所发生的事件,我们需要为该组件提供对应的事件处理
方法,而java又是一种静态语言,我们无法为某个对象动态地添加方法,因此只能继承GUI
组件类,并重写该类的事件处理方法来实现。例如:
自定义MyButton类继承Button。并重写onKeyDown方法

public boolean onKeyDown(int keyCode, KeyEvent envent){
suiper.onKeyDown(keyCode, envent);
Log.i(TAG, "do sth .......");
return true;//返回true,表明该事件不向外扩散
}

xml文件中的标签如下:
<com.packagename.MyButton
...
... />
点击这个按钮就会打印“do sth .......”信息,不许要绑定任何监听事件。因为该按钮自己重写
了onKeyDown方法,这意味着该按钮将会自己处理相应的事件。

3.两种处理模式的比较:
基于监听的事件模型分工更明确,事件源、事件监听由两个类分开实现,因此具有更好的可维护新
Android的事件处理机制保证基于监听的事件监听器会被优先触发。
但是在某些特定的情况下,基于回调的事件处理机制会更好地提高程序的内聚性。比如在一个工程里的
所有Button在被按下的时候背景为图片a,在抬起时候背景图片为图片b。如此功能就应该用回调机制
实现。

4.基于回调的事件传播
几乎所有基于回调的事件处理方法都有一个boolean类型的返回值,该返回值用于标识该该处理方法
是否能完全处理该事件:
如果处理事件的回调方法返回true,表明该处理方法已完全处理该事件,该事件不会传播出去。
返回false则反之。

如果我们把MyButton对象绑定onKeyListener()监听器,并在监听事件里打印“listener”.
并设定监听器中的onKey方法也返回false.表示都没有完全处理该事件。
把回调模式里的onKeyDown方法返回值设定为false。
当两个模式都不能完全处理该事件,该事件就会传播给该View坐在的Activity.
重写Activity的onKeyDown方法,并打印“activity”信息。

点击MyButton,查看log如下:
listener
do sth .......
activity
可知道,Android系统最先触发的是该按键上绑定的事件监听器,接着触发事件的回调方法,然后
还会传播到该组件所在的Activity.

但是如果我们让任何一个事件处理方法返回true,那么该事件就不会继续向外传播。

Similar Posts:

  • Android的启动模式(下)

    Android中的启动模式(下) 在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上).好了,言归正传,在上一篇已经介绍过,activity在栈中默认不能重排,因此,应用中的一个activity可能被多次实例化并且压入同一个栈中,如图所示: 如果此时使用back键返回,activity的每个实例都将会按照打开的顺序重新出现.这势必会导致用户生体验效

  • android 加载模式

    android 加载模式: http://marshal.easymorse.com/archives/2950 http://dev.10086.cn/cmdn/bbs/thread-36313-1-1.html 1.standard模式,也就是默认模式,不需要配置launchMode intent将发送给新的实例. 2.singleTop: singleTop和standard模式,都会将intent发送新的实例: singleTop要求如果创建intent的时候栈顶已经有要创建的Activ

  • 一分钟让你彻底清楚Android四大启动模式

    一.启动模式概述 Android开发同学们,估计有很多同学跟我一样,学习Android很久了,还不清楚Activity的四大启动模式,如果耐心看完本文章,相信你会从此彻底理解清楚Activity四大启动模式到底是什么东东. 了解Activity启动模式之前,先介绍一下Android中task容器栈,其实,就是Activity的一个容器集合,所有的Activity实例都是存放在这个容器栈里面.其实就是数据结构中栈是一个原理:先进后出,后进先出,所有操作都是发生在栈顶. 做Android开发朋友都应

  • android usb host 模式下开发 usb 口被device 占用如何连接PC查看logcat

    http://blog.csdn.net/xiangrufeifei3/article/details/9342397 android usb host 模式下开发 usb 口被device 占用如何连接PC查看logcat 通常是通过usb 与PC端连接 可以在eclipse中查看logcat, 此时是 adb usb 模式下与PC连接的,但是如果使用usb host 模式,开发设备就是usb host ,而usb device 通过usb 口连接开发设备,没有多余的usb 连接PC,如何查看

  • Android中事件处理机制---完

    Android中事件处理机制 Android事件处理机制中包括事件的分发.事件的拦截和事件的处理.最后还有一个怎么使一个布局的父布局不去拦截事件,事件分发本身具有消费事件的能力 事件的消费指的是,这个事件被完结了,完全不存在了. 事件的分发 public boolean dispatchTouchEvent(MotionEvent event) 属于View的方法,用来通知下面的视图,屏幕产生了触摸事件 返回值: true:表示事件分发到此结束,不再调用拦截和处理,事件被消费了(屏蔽掉了这次事件

  • Android MediaProvider 数据库模式(二):ICS 的更新

    简介: 本文介绍 Android 4.0 (ICS) 相对于 2.3 的修改,在之前说过的内容这里不再赘述,要了解详情请到介绍 2.3 的文章:Android MediaProvider数据库模式 Android 4.0 相对于 2.3 数据库改动较大,主要是为了加入 MTP 文件传输模式的支持而做的修改: 原本只有多媒体文件(音乐/视频/图片)才会保存进数据库,现在所有文件均会保存进叫 files 的表,只是非多媒体文件不用分析(如分析专辑名等). 相应地,原来的音乐.视频.图片的表变成了视图

  • Android基础——框架模式MVC在安卓中的实践

    Android基础--框架模式MVC在安卓中的实践 本篇文章包含以下内容: MVC的介绍 MVC的实践 MVC的介绍 MVC (Model View Controller),是模型(model)视图(view)控制器(controller)的缩写,一种软件设计模式,用于组织代码用一种功能模块和数据模块分离的方法 Model:模型层,负责处理数据的加载或者存储 View:视图层,负责界面数据的展示,与用户进行交互 Controller:控制器层,负责逻辑业务的处理 MVC的模型关系图: MVC设计

  • Android Activity 启动模式

    启动模式类别 standard:每次启动activity都会创建新的实例对象.activity可以在多个不同的任务中被实例化多个对象. singleTop:如果当前任务栈顶有activity的实例对象,则调用onNewIntent()获取当前实例对象,否则在当前任务栈中实例化新对象. singleTask:任务栈的只有一个activity实例对象,如果已存在activity实例对象则调用onNewIntent()获取当前实例对象. singleInstance:由系统创建新的任务栈并维护唯一的a

  • 华为Android的工程模式以及log的设置

    记得功能机的时代,我会利用工程模式下的电池温度去判断电池环境下的温度(当然了,手机静放一段时间).但是智能机时代很少这样做了.所以各种机型的工程模式已经不太关注了. 但是华为的几款Android手机特别霸道,将log输出的设置都放在了工程模式中,让我不得不去"放开那个log". 进入工程模式的命令: *#*#2846579#*#* 在projectMenu->后台->log中将日志放开即可. 另外,五儿子进入工程模式的命令: *#*#4636#*#*

  • 第二篇 android应用开发模式之模板模式

    Android提供了一个包含各种服务的应用框架, 为应用开发者提供了标准的应用程序开发方法,应用开发者只需通过四种组件的使用,实现组件提供的相关接口及提供应用用到的资源,布局及工程XML文件,最后打包成一个APK文件就可以完成应用程序的开发. Android框架借鉴了J2EE框架的许多设计思想,框架提供完善的服务给服务者使用, 应用程序由一个个组件组成,通过组件的启动来启动应用程序,应用程序组件借助框架运行在框架之中,框架起到了应用服务器和容器的焦色,负责为应用程序组件提供运行环境,控制应用程序

Tags: