Android学习笔记(36):Android的两种事件处理方式
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的两种事件处理方式的更多相关文章
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android四大组件之服务的两种启动方式详解
Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...
- Android学习笔记(八)——四种基本布局
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,或是嵌套子布局,从而编写出精美的界 ...
- Android学习笔记_50_(转 四种加载方式详解(standard singleTop singleTask singleInstance)
Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...
- Android学习笔记(七)两个Fragment简单跳转示例
在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在AP ...
- Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- 【Android学习】XML文本的三种解析方式(通过搭建本地的Web项目提供XML文件)
XML为一种可扩展的标记语言,是一种简单的数据存储语言,使用一系列简单的标记来描述. 一.SAX解析 即Simple API for XML,以事件的形式通知程序,对Xml进行解析. 1.首先在Web ...
随机推荐
- linux下编译lua库
编辑MakeFile INSTALL_TOP= /usr/local修改为目标install位置 执行 make linux make install 如果提示依赖libreadline 可以直接a ...
- E-card
E-card 题目描述 两个人各有n张牌 第一个人有n-1张平民和1张皇帝 第二个人有n-1张平民和1张奴隶 每次选择一张牌 进行对决 如果都是平民则平局 皇帝赢平民 奴隶赢皇帝 平民赢奴隶(显然只会 ...
- 关于在redux当中 reducer是如何知道传入的state是初始化state下面的哪一条数据
首先初始化redux的数据 reducer 那么问题来了,todos这个reducer是如何知道传入的是初始化state下面的todos这条数据呢? 合并reducer 合并之后是这样的 他们之间的关 ...
- Mybatis Plugin插件安装破解及使用
2018年2月更新 2018年2月份,提供一个网上比较多的一个版本V3.21版本,下载资源里面有个已整合版直接解压放入C:\Users\你的用户名\.IntelliJIdea2017.3\config ...
- pat 1074. 宇宙无敌加法器(20)
1074. 宇宙无敌加法器(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 地球人习惯使用十进制数,并且默 ...
- FusionCharts参数说明补充
原文发布时间为:2010-09-14 -- 来源于本人的百度文章 [由搬家工具导入] 功能特性animation 是否动画显示数据,默认为1(True)showN ...
- Repeater用ul li,一行显示多条数据
原文发布时间为:2009-08-26 -- 来源于本人的百度文章 [由搬家工具导入] .rep { width:680px; float:left; l ...
- 【Reship】use of tangible T4 template engine
1.first of all 之前在 “使用T4模板生成代码 – 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “Multipl ...
- MySql授权和撤销权限操作
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 用户后面可以加@'ip地址' identified by '密码' 例如: ' ' 上面的语句表示将 ...
- 自定义及发布一个webservice服务
自定义及发布一个webservice服务 - 声明 某个业务服务为webservice服务 通过@webservice 注解来声明 - 发布webservice服务 ...