Android学习按键事件监听与Command模式

Android学习按键事件监听与Command模式 - Dufresne - 博客园

Android学习按键事件监听与Command模式

 

一 Command模式

意图:

    将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;

  对请求排队或记录请求日志,以及支持可撤销的操作。

    将请求被封装成一个对象,当向某对象提交请求时,使我们可以不用去知道被具体的请求的操作或者请求的接收者,

  实现了动作的请求者对象和动作的执行者对象之间的解耦合。

适用性:

  1. 使用Command模式代替callback形式的回调应用;
  2. 在不同的时刻指定、排列和执行请求,动态的更改请求;
  3. 支持取消操作;
  4. 支持修改日志,保存请求执行过程以便恢复操作;
  5. Command模式支持一组事务的调用操作。且易于增加扩展新事务; 

  (何为事务参考:http://book.51cto.com/art/201202/319377.htm)

结构:

      

    

说明:

  Command:命令的封装者,声明命令执行的操作接口;

  ConcreteCommand:使命令的具体接收者执行相应的动作;

  Invoke:发出执行该命令的请求,存储具体命令执行者的抽象父类;

  Receiver:实施与执行具体相关请求的具体操作,由命令对象创建者指定;

 

  通过此图可以到此模式的核心:实现操作对象的调用Invoke与具体实施该操作的对象Receiver之间解耦,

是通过增加Command,将动作执行委托给Command来执行调用真正的动作执行者。

 

二 Android中OnClickListener

在View类中:

  public interface OnClickListener {

    void onClick(View v);

  }

  作用:Interface definition for a callback to be invoked when a view is clicked.

    就是一个click事件的回调接口。

  在需要响应click事件的View中,都需要注册一个相应的ClickListener来监听click事件发生时被调用。

看一下面这段代码:Button控件

  

复制代码
public class MyActivity extends Activity {
  protected void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.content_layout_id);final Button button = (Button) findViewById(R.id.button_id);//注册click事件监听器
         button.setOnClickListener(new View.BtnOnClickListener());}
  private class BtnOnClickListener extends OnClickListener{
    public void onClick(View v) {// Perform action on click}}
}
复制代码

 

看一下相应的这个结构: 

   

    

  这里面View就是Invoke,OnClickListener就是Command,MyActivity就是Receiver。

执行过程如下:

  

    

 

可以看到这种方式的应用属于:

  Command模式替换Callback函数形式的回调模型,让框架结构变得更清晰更灵活。

转载于:https://www.cnblogs.com/seven1979/p/4305829.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK...

demo代码如下:private void btnPrint_Click(object sender, EventArgs e){if (this.btnPrint.Text "停止打印"){SetBtnPrintUIEnable();return;}//禁用界面上的相关按钮SetBtnPrintUIDisable();var dt new DataTable();new Task(() >{///开始的打印//1. 获取选中…

fileinputstream_从Java中的FileInputStream读取字节

以下示例显示了如何从Java中的FileInputStream读取字节。import java.io.File;import java.io.FileInputStream;public class fileInputStream {public static void main(String[] args) {byte[] data new byte[1024]; //allocates memory for 1024 bytes//be careful about h…

LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(a ,e ,i ,o ,u)都必须 至少 出现一次。这些元音字母的顺序都必须按照 字…

安川服务器显示run电机没电,安川变频器启动不运行是什么原因

即使按操作器的 RUN 键或输入外部运行信号,电机也不按照指令旋转? 电机不旋转变频器非驱动模式 确认 LED 操作器的 DRV 指示灯是否点亮。? 请操作 LED 操作器,进入驱动模式。(参照 77 页)按了 LO/RE 功能选择键(从控制回路端子输入指令时)在变频器停止…

EhLib TitleButton SVisibleColumnsEh = '错误的列';

unit EhLibConsts; interface resourcestring SClearSelectedCellsEh 清除选择的单元?; SInvalidTextFormatEh 错误的文本格式; SInvalidVCLDBIFFormatEh 错误的 VCLDBIF 格式; SErrorDuringInsertValueEh 插入值过程中出错:; SIgnoreErrorEh 忽略错…

python rpc webservice_PythonXMLRPC服务器端和客户端实例

一、远程过程调用RPCXML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module suppor…

python是动态_1.2. Python是动态语言

python是动态语言 1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的…

特征处理

学自 极客时间 《深度学习推荐系统实战》 特征分为两类: 类别特征(性别、地理位置、季节、天气、风格)数值型特征(年龄、收入、点击量、点击率) 类别特征经过 One-Hot 编码后放入特征向量、或者 多个的特征值采用 M…

C#整理1——进制转换

进制转换:二进制,八进制,十进制,十六进制。 (一)二进制转十进制: 1.写2 2.标指数,从右向左,从0开始依次标记 3.乘系数,一一对应。 4.相加。 例:二…

matlab打开笔记本摄像头_基于MATLAB调用电脑摄像头获取视频和图像

clear all;hwaitbar(0.1,请等待);%waitbar的作用是打开或者更新进度条 h waitbar(x,message)x表示进度条的比例长度,message是在进度条上显示的信息global vid;% global 的作用是定义全局变量vid videoinput(winvideo,1);close(h);preview(vid);%得到预览下的默认…

WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

文章目录0. 常规解压安装,并添加环境变量1. 下载并覆盖 bin 文件夹2. 使VERSION文件的clusterID一致3. 贴下单机配置4. 测试 Hadoop5. 安装Spark环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.70. 常规解压安装,并添加…

ios验证邮箱格式

今天做注册界面时,用户在输入邮箱账号后,我不知道如何去辨别用户是否输入有误,我回想起最初我学过一个叫做"正则表达式"的方法, 但是不知道苹果是否能做到,果断的上网查找了一些相关资料。 最简单的就是利用…

canal mysql从库_canal中间件|数据增量同步解决方案

上一文中提到延时双删等策略实现数据一致性的时候,可能存在删除缓存失败的情况,就会出现缓存和数据库不一致的问题。为了应对删除缓存失败而导致数据不一致的问题,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。流程如…

dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

# 密度聚类DBSCAN、HDBSCANDBSCANDBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有…

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自:Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑: 环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

Makefile 基本知识

Technorati 标签: Makefile 基本知识最常见的书写方式: CC gcc LD ld STRIP strip CFLAGS : -Os -static -DEZ_OS_LINUX CLFLAGS : -Os -static all: mainEXEC main OBJS main.o mytool1.o mytool2.o INCS mytool1.h mytool2.ha…

python考试题库程序改错_求助,程序改错

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在学习python,其中遇到一道习题是改错的。 原代码如下 def break_words(stuff): """This function will break up words for us.""" words stuff.split( ) return words def sort_…

redis 查看key的有效期_redis中key设置过期时间

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"兼容Redis协议标准的、提供持久化的内存数据…

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机。 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底,北京市常住人口为2114.8万人,其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼,历来是身份、福利,以至于幸福感、安全感。那么北京户口有什么好处?外来人口如何落户北京呢&#…