在 Android 中,我们可以通过事件处理使UI与用户互动(UI Events)。

UI的用户事件处理,即View处理用户的操作,在应用程序中几乎不可避免。View是重要的类,它是与用户互动的前线;在Android框架的设计中,以事件监听器(event listener)的方式來处理UI的用户事件。

Android框架提供了非常良好的UI事件处理机制。View是绘制UI的类,每个View对象都可以向Android框架注册一个事件监听器。每个事件监听器都包含一个回调函数(callback method),这个回调函数(callback method)主要的工作就是回应或处理用户的操作。

Event Listener: Click Listener例子

以「用户触碰(touch)」的动作來說,当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener事件监听器;当「touch」事件发生时,Android框架便回调事件监听器里的回调函數。

View.OnClickListener是click listener,顾名思义,这是UI的「Click动作监听器」;当用户对View进行Click操作时(即触控上的UI组件),Android框架便会回调这个View.OnClickListener的回调函數。

View.OnClickListerner的回调函数为onClick()。

这里所提到的监听器泛指event listener,主要用來「监听」用户的各种动作。除了View.OnClickListener外,Android框架还有以下的event listener(及其callback method):

View.OnLongClickListener: onLongClick()

View.OnFocusChangeListener: onFocusChange()

View.OnKeyListener: onKey()

View.OnTouchListener: onTouch()

View.OnCreateContextMenuListener: onCreateContextMenu()

另外一种UI事件的机制为事件处理器(event handler),event handler与event listener是不一样的处理机制。这个留着以后再研究。

以Android所提供的View.OnClickListener來说明程序实现方法。一个较为良好的实现方法是在Acitivty类里实现View.OnClickListener界面,即:

public  class  YypClickListenerActivity  extends  Activity  implements  View.OnClickListener{

...

}

上面的代码用到了面向对象的接口技术,每一个View都可以注册一个event listener,当Android框架收到「click」事件后,便回调event listener的callback method。以Button类为例,当我们想要处理用户触控按钮事件时,就要调用Button类的setOnClickListener()方法来注册click listener。上述的实现方法是,直接在的Activity类YypClickListenerActivity里实现View.OnClickListener,因此上述Button类的click listener为「this」。如下图:

注册click listener的程序代码如下:

Button button = (Button)findViewById(R.id.btn);

button.setOnClickListener( this );

在onCreate()里先找到Button组件,它的click listener为this,接着在的Activity类里实现onClick()。onClick()方法的代码如下,我们以Toast类來回应信息給用户:

public  void  onClick(View v){

Toast.makeText( this , "http://www.linuxidc.com" ,Toast.LENGTH_LONG).show();

}

完整的代码很简单:

package  com.android;

import  android.app.Activity;

import  android.os.Bundle;

import  android.view.View;

import  android.widget.Button;

import  android.widget.Toast;

public  class  YypClickListenerActivity  extends  Activity  implements  View.OnClickListener{

/** Called when the activity is first created. */

@Override

public  void  onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

setContentView(R.layout.main);

Button button = (Button)findViewById(R.id.btn);

button.setOnClickListener( this );

}

public  void  onClick(View v){

Toast.makeText( this , "http://www.linuxidc.com" ,Toast.LENGTH_LONG).show();

}

}

Android事件监听器Event Listener的更多相关文章

  1. Android——基于监听器的事件处理(转)

    事件,我们并不陌生! 所有的基于UI的应用程序,事件都变得不可或缺!试想一下,如果我们做的程序单击按钮和其它控件都没有反应,那么就如同一个人在这个世界上听不到声音一样! Android为我们提供了两种 ...

  2. Java精选笔记_Servlet事件监听器

    Servlet事件监听器 概述 在程序开发中,经常需要对某些事件进行监听,如监听鼠标点击事件.监听键盘按下事件等,此时就需要使用事件监听器. 事件监听器用于对程序中发生的事件进行监听,在监听的过程中会 ...

  3. Android 4.0 事件输入(Event Input)系统

    参考:http://blog.csdn.net/myarrow/article/details/7091061 1. TouchScreen功能在Android4.0下不工作 原来在Android2. ...

  4. Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)

    控制台程序. 定义事件监听器的类必须实现监听器接口.所有的事件监听器接口都扩展了java.util.EventListener接口.这个接口没有声明任何方法,仅仅用于表示监听器对象.使用EventLi ...

  5. Hibernate拦截器(Interceptor)与事件监听器(Listener)

    拦截器(Intercept):与Struts2的拦截器机制基本一样,都是一个操作穿过一层层拦截器,每穿过一个拦截器就会触发相应拦截器的事件做预处理或善后处理. 监听器(Listener):其实功能与拦 ...

  6. Android编程: 界面组成、事件监听器

    学习知识:界面组成.事件监听器 ====界面组成==== 1.用户界面的基本组件叫做View,都是继承android.view.View类,Android里面预定义很多基本的界面组件,比如 Butto ...

  7. Android进程间通信之内部类作为事件监听器

    在Android中,使用内部类能够在当前类里面发用改监听器类,由于监听器类是外部类的内部类.所以能够自由訪问外部类的全部界面组件. 下面是一个调用系统内部类实现短信发送的一个样例: SMS类: pac ...

  8. 关于在Android中添加事件监听器的方法

    一.匿名内部类 1.先找到那个控件(初始化) private Button bt1;  //onCreate方法外 bt1 = (Button)findViewById(R.id.button1); ...

  9. passive 的事件监听器

    很久以前,addEventListener() 的参数约定是这样的: addEventListener(type, listener, useCapture) 后来,最后一个参数,也就是控制监听器是在 ...

随机推荐

  1. oracle11g 导入空表的办法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间 这样会出现导入导出数据库的时候报错,提示空表没有被还原,缺少表的情况 解决方法: 设置deferred_segment ...

  2. Android ProgressDialog 加载进度

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  3. List 去处自定义重复对象方法

    list泛型集合去除重复项,对于单一的某个字段非常简单,但是对于一些自定义要求的还需自定义规则.例子代码: /************绑定乘客信息********/ List<RT.Model. ...

  4. Android -- getSystemService

    Android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardServic ...

  5. Java基础知识强化96:Calendar类之获取任意年份的2月有多少天的案例

    1. 分析: (1)键盘录入任意的年份 (2)设置日历对象的年月日            年:就是(1)输入的数据            月:是2(3月份)            日:是1  (3)把 ...

  6. toString结果

    String[] str = new String[] { "a", "b", "c" }; System.out.println(str) ...

  7. mongodb的tailCursor的设计思想

    http://derickrethans.nl/mongodb-and-solr.html 这是mongodb的php客户端的写法

  8. Cookies欺骗分析与防护

    今天来谈谈cookies欺骗是怎么回事以及如何避免. 用户在登录之后通常会保存用户信息,以便在其他需要权限的页面去验证用户信息是否具有访问权限. 有同学说我在登录的时候已经很注意SQL注入问题了,还有 ...

  9. (转)jquery.validator规则

      登录|注册     收藏成功 确定 收藏失败,请重新收藏 确定 标题 标题不能为空 网址 标签 摘要   公开 取消收藏             分享资讯 传PPT/文档 提问题 写博客 传资源 ...

  10. xxx is not in the sudoers file. This incident will be reported的解决方法

    1>.进入超级用户模式.也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式.(当然,你也可以直接用root用户登录,因为红旗安装过后默认的登录 ...