我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android中的事件处理总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android中的事件处理总结

                                                                                       Android中的事件处理总结

Android系统对动作做出的响应机制就是事件处理。Android提供了两种事件处理机制。

基于监听的事件处理机制 基于回调的事件处理机制

一、基于监听的事件处理机制

Android的事件监听机制就是一种”面向对象”的事件处理,是一种”委派模式(Delegate)”事件处理方式。Android的UI组件(事件源)将整个事件处理委托给特定的对象(事件监听器);当该事件源发生指定的事件时,就通知所委托的事件监听器,由事件监听器来处理事件。例如:消防所(事件监听器)监听所有的火灾事件并处理火灾,所有的企事业单位(事件源)当发生火灾时本身自己无法灭火,都委托给消防所来灭火。

所以基于监听的事件的处理模型中,主要涉及三类对象:

Event Source(事件源):事件发生的Android组件。例如:按钮、菜单等 Event(事件): UI上面的事件源发生的特定的事件,一般都是通过Event对象获取。例如:长按、点击等 Event Listener(事件监听器):负责监听事件源所发生的的事件,对各种事件做出相应的反应。例如:处理登录业务的响应。

 

 

事件监听模式分为以下几种使用场景:

内部类形式:将事件监听器类定义成当前类的内部类 外部类形式:将事件监听器类定义成一个外部类 Activity本身作为事件监听器类:让Activity本身实现监听器接口,并实现事件处理方法 匿名内部类形式:使用匿名内部类创建监听器对象 直接绑定标签:直接在界面布局文件中指定标签绑定事件处理函数

 

方法一:内部类形式

将监听器类定义成当前类的内部类

 

方法二:外部类

将事件监听器类定义为一个外部类,通过外部类对事件源进行监听,并在外部类实现事件。

 

方法三: Activity本身作为事件监听器类

1.监听器设置为this,代表自身类、

2.自身类实现事件监听接口View.OnClickListener、

3.自身类重写接口onClick方法

 

 

方法四:匿名内部类

使用匿名内部类创建监听器对象

方法五:直接绑定标签

通过UI布局文件,设定UI控件的android:onClick的属性(事件处理方法),在相应的Activity代码文件中里面设置跟android:onClick设置的同名方法,且该方法必须是public void的,同时有一个View类型的参数

 

基于监听的事件处理机制总结:

 1).通过设置UI组件的android:onClick属性,然后代码实现方法:此方法业务逻辑和UI耦合性太高,实际业务一般不用

2).匿名类:一般只应用特定组件的特定业务响应

3).内部类:当前类可以重复使用该监听器类;当前类的所有界面组件都可以使用该内部类作为监听器。

4).外部类:可作为多个UI共同的事件处理,适用多个UI组件复用;但事件源要传递信息给事件监听器时则不太灵活,必须通过成员变量及构造方法

5).Activity自身类:处理比较灵活,实际中用的最多

6).当同一个UI对同一个事件注册多个监听器时,根据注册的顺序,最后注册的事件监听器优先触发,事件不再传递,最后触发的是通过UI设定的方法

 

 

二、基于回调的事件处理机制

监听机制是一种委托(Delegate)的事件处理方式;而回调机制则是事件源和事件监听是统一的(自己的事情自己干)。

方法回调是将功能定义与功能分开的一种手段,一种解耦合的设计思想;在Java中回调是通过接口来实现的, 作为一种系统架构,必须要有自己的运行环境,且需要为用户提供实现接口;实现依赖于客户,这样就可以 达到接口统一,实现不同,系统通过在不同的状态下"回调"我们的实现类,从而达到接口和实现的分离!

  Android提供的GUI组件上发生的所有事情,系统都提供了对应的事件处理方法,Java是一种静态语言无法给GUI组件或对象提供动态的添加方法,只能继承GUI,通过重写该类的处理方法来实现回调事件处理。 Android为GUI组件提供大量响应事件的方法,可以用于回调的使用。

常见View组件的回调方法:

android为GUI组件提供了一些事件处理的回调方法,以View为例,有以下几个方法

在该组件上触发屏幕事件: boolean onTouchEvent(MotionEvent event);
在该组件上按下某个按钮时: 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 onTrackballEvent(MotionEvent event);
*
当组件的焦点发生改变,和前面的6个不同,这个方法只能够在View中重写哦! protected void onFocusChanged(boolean gainFocus, int direction, Rect previously FocusedRect)

 

在Android中基于回调的事件处理机制使用场景有两个:

1)自定义view

当用户在GUI组件上激发某个事件时,组件有自己特定的方法会负责处理该事件 通常用法:继承基本的GUI组件,重写该组件的事件处理方法,即自定义view 注意:在xml布局中使用自定义的view时,需要使用"全限定类名"

   

 

因为我们直接重写了Button的三个回调方法,当发生点击事件后就不需要我们在Java文件中进行事件监听器的绑定就可以完成回调,即组件会处理对应的事件,即事件由事件源(组件)自身处理!

 

2)基于回调的事件传播:

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

1.如果返回true,则表明该处理方法已完全处理了该事件,该事件不会被传播出去。

2.如果返回false,表明该处理方法未完全处理该事件,该事件会传播出去。

对于基于回调的事件处理传播而言,某组件上所发生的事情不仅激发该组件上的回调方法,也会触发该组件所在的Activity的回调方法——只要事件能传播到该Activity。

即是否向外传播取决于方法的返回值是时true还是false;

传播的顺序是: 监听器--->view组件的回调方法--->Activity的回调方法

 

参照Android开发者文档可知OnLongClickListener() ,OnFocusChangeListener(),OnKeyListener()等监听器的使用场景。而onMenuItemClickListener则监听当菜单项被点击后触发的onMenuItemClick事件,

参考资料

[1].Flame_Dream.Android开发系列10——事件处理机制.OL.

https://blog.csdn.net/Future_One/article/details/104779618

 

[2].李yi辉.Android中的事件处理总结-基于监听的事件处理.OL.

 https://blog.csdn.net/yihuiworld/article/details/46308569

[3]. 输入事件概览  |  Android 开发者  |  Android Developers

https://developer.android.com/guide/topics/ui/ui-events?hl=zh-cn#EventHandlers

[4]. 3.2 基于回调的事件处理机制

https://www.runoob.com/w3cnote/android-tutorial-callback-event-handle.html


作者:逝不等琴生


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android中的事件处理总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android中的事件处理总结

Android中的事件处理总结 Android系统对动作做出的响应机制就是事件处理。Android提供了两种事件处理机制。 基于监听的事件处理机制基于回调的事件处理机制 一、基于监听的事件处理机制 Android的事件监听机制就是一种”面向
2022-06-06

Android ButtonOnClick事件的写法总结

Android ButtonOnClick事件的写法总结假设layout里有三个Button吧,id分别是 button_1 ,button_2 , button_3之前一直都知道有两种onClick写法:button_1.setOnCli
2023-05-30

Python 文件处理注意事项总结

Python 文件处理注意事项总结 文件处理在编程中是常见的操作,文件的打开,关闭,重命名,删除,追加,复制,随机读写非常容易理解和使用。需要注意的是文件的安全关闭,采用with语句轻松便捷: with open(pathname,”r”)
2022-06-04

Android编程中延后处理事件的方法小结

本文实例讲述了Android编程中延后处理事件的方法。分享给大家供大家参考,具体如下: 一、Handler和TimerTask相结合 1、首先定义TimerTaskTimerTask task = new TimerTask(){publi
2022-06-06

JavaScript中事件循环总结

这篇文章主要讲解了“JavaScript中事件循环总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中事件循环总结”吧!js中的事件循环因为JavaScript是单线程的
2023-06-20

android onTouchEvent处理机制总结(必看)

项目中总会用到一些触摸事件,每次使用都是百度各种资料,看各种大神的分析笔记。这次我自己总结下关于触摸事件的一些知识点。一来可以让自己对触摸事件印象更加深刻,也给以后的项目做一个参考。最难理解的其实是onTouchEvent方法。 一、 概述
2022-06-06

全面总结Android中线程的异步处理方式

一、概述 Handler 、 Looper 、Message 这三者都与Android异步消息处理线程相关的概念。那么什么叫异步消息处理线程呢? 异步消息处理线程启动后会进入一个无限的循环体之中,每循环一次,从其内部的消息队列中取出一个消息
2022-06-06

Android应用事件处理

一. 实验目的 1.掌握内部类作为事件监听器的事件处理 2.掌握外部类作为事件监听器的事件处理 3.掌握基于回调的事件处理 二. 实验内容 1.内部类作为事件监听器。设计一个APP,界面包含一个EditText和一个Button。用户点击按
2022-06-06

Android中View事件防抖的处理方案

这篇文章主要介绍了Android中View事件防抖的处理方案,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。两种方案侵入式防抖处理(NoShakeClickListener)
2023-06-14

Android 黑屏问题分析处理总结

介绍 黑屏问题是显示相关的综合性问题,涉及Android应用层、框架层和底层SurfaceFlinger、屏显等多个领域。下面有一些基础的判断来定位黑屏问题的归属: (1) 屏幕没有亮屏、背光为0则需先从power、屏显角度分析 (2) 屏
2023-08-16

Android事件分发机制(下) View的事件处理

综述在上篇文章Android中的事件分发机制(上)——ViewGroup的事件分发中,对ViewGroup的事件分发进行了详细的分析。在文章的最后ViewGroup的dispatchTouchEvent方法调用dispatchTransfo
2022-06-06

Android按钮单击事件的四种常用写法总结

很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总结一下,比较下各种写法的优劣,希望对大家灵活地选择编码方式可以有一定的参考借鉴价值。 xml文件代码
2022-06-06

JAVA中的事务,事务模块总结

什么是事务?简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性:"执行成功后提交",意味着持久性;"执行失败后回滚",意味着一致性;"要
JAVA中的事务,事务模块总结
2016-07-09

Android中应用多进程的整理总结

前言 在计算机操作系统中,进程是进行资源分配和调度的基本单位。这对于基于Linux内核的Android系统也不例外。在Android的设计中,一个应用默认有一个(主)进程。但是我们通过配置可以实现一个应用对应多个进程。 本文将试图对于And
2022-06-06

Android 中 EventBus 的使用之多线程事件处理

在这一系列教程的最后一篇中,我想谈谈GR的EventBus,在处理多线程异步任务时是多么简单而有效。 AsyncTask, Loader和Executor…… 拜托!Android中有很多种执行异步操作的方法(指平行于UI线程的)。Asyn
2022-06-06

Android开发基础 事件处理

Android事件处理 1-基于监听的事件处理 基于监听的事件处理,其实就是为UI组件绑定事件监听器。 在事件监听处理模型中,主要涉及以下三个对象。 (1)Event Source(事件源):一般是指各个组件。 (2)Event(事件):一
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录