Android事件机制
一句话描述: 用户和程序之间的互动机制
什么是事件?
用户和程序交互时触发的程序操作.
只要是事件,必须具备三方面:
1 事件的发生者
2 事件接受者
3 事件触发和传递
事件处理的方法
观察者模式:事件源就必须拥有一个观察者的引用
传递:靠调用观察者的方法
然后把数据传递过去
预定义事件(发生者):单机,双击,长安等,并以类的成员变量分别表示这些事件
这些控件的成员变量按事件的类型定义为不同类型的借口。因此,这些成员变量存放的对应借口的实现类的对象地址
程序员事先编写好实现了某个接口的对象,在该对象的方法中完成对用户操作的相应,然后将该对象的地址保存在控件对象的某个成员变量中
回调:在android程序运行时,用户出触发了该控件的某个事件。Android系统将找到该成员变量中保存的对象中的方法,完成对用户操作的相应,这个过程称之为回调。
实现步骤:
1 定义事件的监听程序(Listener),并且注册它。
程序员编写一段相应用户的代码,并以接口的实现类对象的方式,将对象的地址保存在控件的一个成员变量中。
例如:Button类的单机事件,将一段代码以接口实现类对象的方式保存在Button。mOnClickListener成员变量中
2 用户出触发了注册事件时,系统将会在注册的时间相应程序
由系统完成,程序只需要完成步骤1中代码的编写和事件的注册。
实现的五种方式和优点
传统方式实现直接监听:
控件onClick属性设置点击事件的相应方法名
监听东西少的时候,项目小的时候
不方便,需要时刻去检查,xml中的控件名字
匿名内部类实现OnClickListener接口:
单一地方使用,没有重复性,匿名内部类更方便,代码少
实现机制:通过匿名内部类实现Onclick借口
Activity类实现OnClickListener接口:
适用于按钮较多,但是每个按钮相应代码较短
Activity直接实现OnClickListener接口
内部类实现OnClickListener接口:
具有复用性
实现机制在Activity类中定义内部类实现OnClickListener接口
外部类实现OnClickListener接口:
适用于监听器,全局可见,有利于代码混淆,安全
外部类实现OnClickListener接口
四大组件不能混淆
Android事件机制的更多相关文章
- Android事件机制之二:onTouch详解
<Android事件机制之一:事件传递和消费>一文总结了Android中的事件传递和消费机制. 在其中对OntachEvent中的总结中,不是很具体.本文将主要对onTach进行总结. o ...
- Android事件机制之一:事件传递和消费
http://www.cnblogs.com/lwbqqyumidi/p/3500997.html 关于Android中的事件机制,用到的地方还是很多的,并且这个知识点还真有点复杂. 在写这篇文章前, ...
- Android事件机制全然解析
android事件是一级一级传递的,假设父控件不拦截.就传给子控件,假设父控件想要消费事件也就是拦截事件的话,须要重写这种方法 public boolean onInterceptTouchEvent ...
- 讲讲Android事件拦截机制
简介 什么是触摸事件?顾名思义,触摸事件就是捕获触摸屏幕后产生的事件.当点击一个按钮时,通常会产生两个或者三个事件--按钮按下,这是事件一,如果滑动几下,这是事件二,当手抬起,这是事件三.所以在And ...
- Android事件分发机制浅谈(一)
---恢复内容开始--- 一.是什么 我们首先要了解什么是事件分发,通俗的讲就是,当一个触摸事件发生的时候,从一个窗口到一个视图,再到一个视图,直至被消费的过程. 二.做什么 在深入学习android ...
- 通俗理解Android事件分发与消费机制
深入:Android Touch事件传递机制全面解析(从WMS到View树) 通俗理解Android事件分发与消费机制 说起Android滑动冲突,是个很常见的场景,比如SliddingMenu与Li ...
- android事件拦截处理机制详解
前段时间刚接触过Android手机开发,对它的事件传播机制不是很了解,虽然网上也查了相关的资料,但是总觉得理解模模糊糊,似是而非,于是自己就写个小demo测试了一下.总算搞明白了它的具体机制.写下自己 ...
- Android事件分发机制(下)
这篇文章继续讨论Android事件分发机制,首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View和子 ...
- Android事件分发机制(上)
Android事件分发机制这个问题不止一个人问过我,每次我的回答都显得模拟两可,是因为自己一直对这个没有很好的理解,趁现在比较闲对这个做一点总结 举个例子: 你当前有一个非常简单的项目,只有一个Act ...
随机推荐
- 诡异错误二:TypeError: data type not understood
如何使用Python产生一个数组,数组的长度为1024,数组的元素全为0? 很简单啊, 使用zeros(1024) 即可实现! 如何产生一个2×1024的全0矩阵呢?是否是zeros(2,1024) ...
- gzip: File too large错误
--AIX Gzip File Too Large Error------------------------------------2013/09/29 今天在使用gzip解压一个oracle rm ...
- 详实的SQL学习笔记
写在前面:最近在上海找工作,前前后后面试了N家单位,发现各个公司对程序员的数据库知识尤其是SQL语句的掌握程度有很高的要求,作为一名光荣的程序员,不会玩儿SQL语句走在街上根本不好意思和人打招呼!好了 ...
- kali linux 2.0下搭建DVWA渗透测试演练平台
DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...
- 利用angular打造管理系统页面
1 创建一个新的angular应用 ng new adminSystem 2 利用WebStorm打开adminSystem应用 3 借助AdminLTE这个开源项目来辅助开发 AdminLTE项目: ...
- JVM堆内存设置
今天碰到了一个题目,讲的是关于堆内存的问题,题目如下 下面哪种情况会导致持久区jvm堆内存溢出? A.循环上万次的字符串处理 B.在一段代码内申请上百M甚至上G的内存 C.使用CGLib技术直接操 ...
- 关于php中的include html文件的问题,为什么html可以在php中执行
之前在w3shXXl看的教程,上面对include的解释是把指定的文件复制到这条指令执行的地方. 这真是坑到我了..... 在了解mvc的时候,控制器显示视图时需要用include包含html视图文件 ...
- Android学习之旅(一)
2017-02-27 今天开始,正式开启Android学习之旅,背景从事.Net平台开发快五年了,一直在用C#做Web开发. 前天选购了两本书:<Java 编程思想(第四版)>和<第 ...
- 记录-新建一个web应用的过程与曲折
第一步/ 打开eclipse,菜单栏下,File–New–Other-,打开后找到web–Dynamic Web Project,然后单击Next. 解释一下,Dynamic ,动态的,变化的,Dyn ...
- struts分页实现