Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理。

我们来说的easy理解一点:

(1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法。除了一些特定的情况,大部分情况使用基于回调的事件处理方式并非最好的选择。

(2)基于监听的事件处理就是在监听器中定义事件的处理方式,再为组件绑定监听器。

这样的方式无疑是更可以体现面向对象思想的。

基于回调的事件处理:

View类包括例如以下的方法能够用于重写:

boolean onKeyDown(int keyCode,KeyEvent event):按下某个按键时触发

boolean onKeyUp(int keyCode,KeyEvent event):松开某个按键时触发

boolean onKeyLongPress(int keyCode,KeyEvent event):长按某个按键时触发

boolean onKeyShortcut(int keyCode,KeyEvent event):按下某个快捷键时触发

boolean onTouchEvent(MotionEvent event):触摸屏幕时触发

我们注意到返回值都是一个boolean值。这用于标识该方法是否能全然处理该事件。返回true表示能全然处理,事件不会传播出去,返回false表示不能全然处理,事件会传播出去。交给以下的事件处理方法处理。

基于监听的事件处理:

这是一种委派式的事件处理方式:普通组件(事件源)将事件处理托付给(绑定)事件监听器,事件源发生指定的事件时。通知事件监听器来处理该事件。

下图展示的是基于监听的事件处理流程图:

了解下以下这几种概念:

事件源:就是各种GUI组件。

事件监听器:各种XxxListener类。须要实现事件处理方法的接口。

注冊监听器:调用事件源的setXxxListener(XxxListener)方法。

View包括例如以下几个内部接口:

View.OnClickListener:处理单击事件

View.OnCreateContextMenuListener:处理单击上下文菜单项的事件

View.onFocusChangeListener:处理焦点改变事件

View.OnKeyListener:处理按键事件

View.OnLongClickListener:处理长按事件

View.OnTouchListener:处理触摸事件

一个事件监听器能够被多个GUI组件所共用。

实现事件监听器能够有例如以下几种形式:

内部类、外部类、Activity本身实现,匿名内部类、直接绑定到标签(这是特殊但非常方便的形式)。

这各种实现假设熟悉Java的话,实现都是不难的。

Android学习笔记(36):Android的两种事件处理方式的更多相关文章

  1. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  2. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  3. Android四大组件之服务的两种启动方式详解

    Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...

  4. Android学习笔记(八)——四种基本布局

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...

  5. Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)

    Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...

  6. Android学习笔记(七)两个Fragment简单跳转示例

    在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在AP ...

  7. Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...

    下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...

  8. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  9. 【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)

    XML为一种可扩展的标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述. 一.SAX解析 即Simple API for XML,以事件的形式通知程序,对Xml进行解析. 1.首先在Web ...

随机推荐

  1. [hdu5307] He is Flying [FFT+数学推导]

    题面 传送门 思路 看到这道题,我的第一想法是前缀和瞎搞,说不定能$O\left(n\right)$? 事实证明我的确是瞎扯...... 题目中的提示 这道题的数据中告诉了我们: $sum\left( ...

  2. Linux 程序编译过程的来龙去脉

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  3. Codeforces Round #323 (Div. 2) C 无敌gcd 数学/贪心

    C. GCD Table time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. FZU 2168 前缀和+dp递推

    Description   部队中共有N个士兵,每个士兵有各自的能力指数Xi,在一次演练中,指挥部确定了M个需要防守的地点,按重要程度从低到高排序,依次以数字1到M标注每个地点的重要程度,指挥部将选择 ...

  5. nutch2.x在eclipse+windows环境下运行遇到的一些问题的解决方案

    1.问题 permission /tmp/hadoop.... 解决方法:下载hadoop源码包,修改org.apache.hadoop.fs.FileUtil.java文件中方法checkRetur ...

  6. 洛谷 [P1337] 平衡点

    模拟退火练手 一道模拟退火的好题 结果一定势能最小 与模拟退火思路高度一致 #include <iostream> #include <cstdio> #include < ...

  7. ASP.NET三层架构的优点和缺点

    原文发布时间为:2009-10-24 -- 来源于本人的百度文章 [由搬家工具导入] 小项目,以后变动不大的不用三层架构。 ASP.NET三层结构说明 完善的三层结构的要求是:修改表现层而不用修改逻辑 ...

  8. Scrapy笔记:使用代理ip

    scrapy框架使用代理ip的基本思路是修改请求对象中的meta['proxy']的值,将代理ip赋值给这个属性.遵循这个思路,只要是生成Request对象的地方都可以设置Request的值. dow ...

  9. hdu 1385(Floyed+打印路径好题)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  10. fetch API 简单解读

    http://f2e.souche.com/blog/fetch-api-jie-du/?utm_source=tuicool&utm_medium=referral 在我们日常的前端开发中, ...