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

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

?

一 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函数形式的回调模型,让框架结构变得更清晰更灵活。

时间: 2024-10-04 07:38:58

Android学习按键事件监听与Command模式的相关文章

html学习 - jquery事件监听详解

html学习 - jquery事件监听详解 html学习 - jquery事件监听详解 监听方法 监听方法参数解释 click参数 事件自动执行问题解决 bind方法 live方法 监听方法 在jquery里,监听的方法比较多,用的最多的就是简单的.click() .onchange() .pressdown() 所以这样很简单啊,直接使用就好了,只要符合参数规范就可以了.除了这个还有bind() live() 方法. 而addEventListener()同bind()方法是没有很大功能上的区

Android截屏事件监听

转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/53737655 1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserver监听全部资源的变化 监听截屏快捷按键 由于厂商自定义Android系统的多样性,再加上快捷键的不同以及第三方应用,监听截屏快捷键这事基本不靠谱,可以直接忽略. 本文使用

Android学习【按钮监听】

xml文件 <Button android:id="@+id/star_button1" ...... /> MainActivity 文件 写法 一 class MyListener implements OnClickListener { @Override public void onClick(View v) { //2.定义成员内部类实现事件监听响应 if (v.getId()==R.id.star_button1){ System.out.println(&qu

Android——按钮的事件监听

关于Button按钮的四种事件监听方法总结 首先我们在activity_main.xml里面先定义一个Button空间 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" andr

spring boot 学习 ---- 使用事件监听

spring 的事件监听 事件监听其实我们并不陌生,简单来讲,当程序达到了某个特定的条件,程序就会自动执行一段指令.在spring 中也一样,我们可以使用spring中的事件监听来实现某些特定的需求. 发布事件 既然要监听事件,首先要发布我们的事件嘛.在spring中发布事件我们可以通过继承ApplicationEvent 来发布我们的事件类. @Data public class SendEvent extends ApplicationEvent { public SendEvent(Obj

html学习 - javascript事件监听以及addEventListener参数分析

事件监听 在Javascript中事件的监听是用来对某些操作做出反应的方法.例如监听一个按钮的pressdown, 或者获取鼠标左键按下时候鼠标的位置.这些都需要使用监听来完成.监听的函数很简单:addEventListener. 这里解释一下一个网页的嵌套关系:最外层:window 包含:document 包含:html 包含: body 包含:div等等... addEventListener监听方法 按钮监听事件响应 首先我们需要获取一个按钮的handle,获取的方法很简单,代码如下: v

JS组合按键事件监听插件

[1].[代码] [JavaScript]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 7

关于android软键盘enter键的替换与事件监听

android软键盘事件监听enter键 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有 normal,actionUnspecified,actionNone,actionGo,actionSearch,actionSend,actionNext,actionDone, 例如当值为actionNext时enter键外观变成一个向下箭头,而值为actionDone时enter键外观则变成了“完成”两个字. 我们也可以重写enter的事件,方法如下 Jav

前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象

JavaScript语言将任务的执行模式可以分成两种:同步(Synchronous)和异步(Asychronous). “同步模式”就是一个任务完成之后,后边跟着一个任务接着执行:程序的执行顺序和排列顺序是一直的:”异步模式”则完全不同,每一个任务都有一个或者多个回调函数(callback),前一个任务结束的时候,不是执行下一个任务,二十执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务顺序不一致的,异步的. 在浏览器端,耗时时间长的操作都应该异步执行,避免浏览器数去