通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件、选框的状态切换事件。

一、Android事件处理

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

基于监听的事件处理:主要做法就是为Android界面组件绑定特定的事件监听器,前面小节已经见到大量这种事件处理的示例。

基于回调的事件处理:主要做法就是重写Android组件特定的回调方法, 或者重写Activity的回调方法。Android为绝大部分界面组件都提供了事件响应的回调方法,开发者只要重写它们即可。

一般来说,基于回调的事件处理可用于处理一些具有通用性的事件,基于回调的事件处理代码会显得比较简洁。但对于某些特定的事件,无法使用基于回调的事件处理,只能采用基于监听的事件处理。

本期先来学习基于监听的事件处理,后面再学习基于回调的事件处理,关注分享达人秀(ShareExpert)获取第一手教程,也可以加小编微信(jinwenyu2010)拽入Android零基础入门技术讨论微信群共同进步。

二、基于监听的事件处理概述

基于监听的事件处理是一种更“面向对象”的事件处理,在事件监听的处理模型中主要涉及如下三类对象。

Event Source (事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。

Event (事件):事件封装了界面组件上发生的特定事情(通常就是一次用户操作)。如果程序需要获得界面组件上所发生事件的相关信息,一般通过Event对象来取得。

Event Listener (事件监听器):负责监听事件源所发生的事件,并对各种事件做出相应的响应。

当用户按下一个按钮或者单击某个菜单项时,这些动作就会激发一个相应的事件,该事件就会触发事件源上注册的事件监听器(特殊的Java对象),事件监听器调用对应的事件处理器 (事件监听器里的实例方法)来做出相应的响应。

每个组件均可以针对特定的事件指定一个事件监听器,每个事件监听器也可监听一个或多个事件源。因为同一个事件源上可能发生多种事件,委派式事件处理方式可以把事件源上所有可能发生的事件分别授权给不同的事件监听器来处理;同时也可以让一类事件都使用同一个事件监听器来处理。

Android事件处理流程如下图所示:

从上图可以知道,基于监听的事件处理模型的流程如下:

为某个事件源(界面组件)设置一个监听器,用于监听用户操作。

当用户操作时,会触发事件源的监听器。

生成了对应的事件对象。

将这个事件源对象作为参数传给事件监听器。

事件监听器对事件对象进行判断,执行对应的事件处理器(对应事件的处理方法)。

Android中基于监听的事件处理模型的开发步骤如下。

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

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

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

对于这三件事情,事件源可以是任何界面组件,不太需要开发者参与;注册监听器也只要一行代码即可,因此事件编程的关键就是实现事件监听器类。

在基于监听的事件处理模型中,事件监听器必须实现事件监听器接口,Android为不同的界面组件提供了不同的监听器接口,这些接口通常以内部类的形式存在。以View类为例,它包含了如下几个内部接口。

View.OnClickListener:单击事件的事件监听器必须实现的接口。

View.OnCreateContextMenu Listener :创建上下文菜单事件的事件监听器必须实现的接口。

View.onFocusChangeListener:焦点改变事件的事件监听器必须实现的接口。

View.OnKeyListener:按键事件的事件监听器必须实现的接口。

View.OnLongClickListener:长按事件的事件监听器必须实现的接口。

View.OnTouchListener:触摸事件的事件监听器必须实现的接口。

通过前面的学习,知道事件监听器就是实现了特定接口的Java类的实例。在程序中实现事件监听器,通常有如下几种形式。

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

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

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

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

直接绑定到标签形式:直接在xml布局文件对应的Activity中定义一个事件处理方法,然后在布局文件中引用要触发的事件。

三、使用匿名内部类作为事件监听器

大部分时候,事件处理器都没有什么复用价值(可复用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。实际上,这种形式是目前使用最广泛的事件监听器形式,在前面的基本组件学习中也是使用的该种方法来绑定监听器。

接下来通过一个简单的示例程序来学习Android使用匿名内部类作为事件监听器。

同样使用WidgetSample工程,继续使用app/main/res/layout/目录下的activity_main.xml文件,在其中填充如下代码片段:

为了监听按钮的点击事件,在Java代码中为其添加点击事件监听器,具体代码如下:

上面程序中的粗体字部分使用匿名内部类创建了一个事件监听器对象,“new监听器接口”或“new事件适配器”的形式就是用于创建匿名内部类形式的事件监听器。

运行程序,点击按钮,可以看到下图所示界面效果。

对于使用匿名内部类作为事件监听器类的形式来说,唯一的缺点就是匿名内部类的语法有点不易掌握,如果Java基础扎实,匿名内部类的语法掌握较好,通常建议使用匿名内部类作为监听器类。

Android中基于监听的事件处理的其他四种形式下期再继续学习。

今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

往期总结分享:

Android零基础入门第1节:Android的前世今生

Android零基础入门第2节:Android 系统架构和应用组件那些事

Android零基础入门第3节:带你一起来聊一聊Android开发环境

Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

Android零基础入门第9节:Android应用实战,不懂代码也可以开发

Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

Android零基础入门第13节:Android Studio配置优化,打造开发利器

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

Android零基础入门第16节:Android用户界面开发概述

Android零基础入门第17节:TextView属性和方法大全

Android零基础入门第18节:EditText的属性和使用方法

Android零基础入门第19节:Button使用详解

Android零基础入门第20节:CheckBox和RadioButton使用大全

Android零基础入门第21节:ToggleButton和Switch使用大全

Android零基础入门第22节:ImageView的属性和方法大全

Android零基础入门第23节:ImageButton和ZoomButton使用大全

Android零基础入门第24节:自定义View简单使用,打造属于你的控件

Android零基础入门第25节:简单且最常用的LinearLayout线性布局

Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

Android零基础入门第27节:正确使用padding和margin

Android零基础入门第28节:轻松掌握RelativeLayout相对布局

Android零基础入门第29节:善用TableLayout表格布局

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

Android零基础入门第31节:少用的AbsoluteLayout绝对布局

Android零基础入门第32节:新推出的GridLayout网格布局

Android查看系统事件,Android系统的事件处理概述相关推荐

  1. Android之滑动事件冲突解决 Touch事件处理机制总结

    android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解.  一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...

  2. android方向触摸事件,Android触摸事件传递机制,这一篇就够了

    整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制. 这个触摸事件就是从外层往内层一层层的传递. 整个传递机制,分为3个步骤:分发,拦截,和消费. 1. 触摸事件的类 ...

  3. android 轨迹球事件,Android压力测试

    原标题:Android压力测试 来源:http://www.uml.org.cn 准备测试环境 准备Android SDK环境 下载 AndroidSDK 准备python环境 下载python AP ...

  4. android eclipse 按钮事件,android eclipse按钮的OnClick事件 - java

    我有2个文件:main_activity.xml和home.xml.我在main_activity.xml中做了一个按钮 这是代码片段: xmlns:tools="http://schema ...

  5. android 横向滑动事件,android左右手势滑动事件处理

    建了个交流群:416157653,欢迎大家加入讨论 要实现手指在屏幕上左右滑动的事件需要实例化对象GestureDetector,new GestureDetector(MainActivity.th ...

  6. android查看cpu信息,Android使用adb命令查看CPU信息

    Android中使用JNI编程的时候会需要编译出不同的SO文件,以供适配不同的机型. 例如: 由此需要查看不同机型的CPU信息. 使用ADB命令查看CPU信息命令如下: 1. adb shell 2. ...

  7. android 查看cpu之和,Android查看CPU和GPU使用率

    一.top -t 能打印出线程级别的CPU使用状况 0.打印进程的堆栈信息.从堆栈信息里能够经过.so辨别哪一个线程是干什么的,从而在 top -t 的结果里去查找你想要的那个线程的 CPU 使用状况 ...

  8. android listview edittext 事件,Android ListView item中含有Edittext 中一些坑

    今天做一个界面.  是 一个列表 .列表中有spinner,button,edittext等控件 首次打开需要展示,用户可以修改,修改后数据保存. ‍‍在保存Edittext控件上的值的时候,用的et ...

  9. android方向触摸事件,Android触摸事件如何传递?

    慕工程0101907 让我们看一个视觉示例.在此处输入图片说明发生触摸事件时,首先会向每个人通知该事件,从活动开始,一直到顶部的视图.然后,每个人都有机会处理该事件,从顶部的视图(触摸区域中Z顺序最高 ...

最新文章

  1. 《高性能JavaScript》(读书笔记)
  2. MySQL日期和时间类型
  3. python numpy中astype使用不当导致图像出现artifact
  4. open-falcon的邮件报警
  5. 科技部教育部联合发文为科研人员绩效考核增加新依据
  6. php服务器安装什么操作系统,php 服务器操作系统
  7. oracle共享内存不足,Oracle数据库共享内存分配不足怎么办
  8. Jquery实现子菜单散开动画
  9. ppt变成了图片不能编辑文字怎么办_解决PPT字体缺失这个问题,这个技巧你一定要掌握...
  10. java中赛场统分的情况
  11. cad墙线打断lisp_[求助]很多相交线快速打断 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  12. CKEditor 4.x 批量图片上传插件
  13. ubuntu无法清空回收站解决办法
  14. 【判断一个文件是否为 excel 文件的正则表达式】
  15. 前端des加密,后端des解密
  16. 用python 打开一个excel文件
  17. Java图形化界面编程超详细知识点(8)——列表框
  18. 用迁移学习创造的通用语言模型ULMFiT,达到了文本分类的最佳水平
  19. matlab中如何定义整形变量,MATLAB中定义变量的问题
  20. python换源_python更换国内源

热门文章

  1. python基础(条件及循环)
  2. Multi-Dimensional Pruning[译]
  3. 程序死锁了,我该怎么办?
  4. c语言:输入一个整数n,计算n!
  5. javascript 面向对象编程(封装、继承)
  6. python做时序图_python如何做时间序列
  7. oracle 修改fstab,更新 /etc/fstab 文件
  8. 【项目五】准考证号检查
  9. cass参考手册_cass9.0 参 考 手 册.doc
  10. RotateAnimation类:旋转变化动画类