【Android】基于监听的事件处理和基于回调的事件处理、两者的区别

原文:http://blog.csdn.net/zhangzeyuaaa/article/details/40820435

凡是涉及到UI编程,就必然需要进行各种事件处理。

Android提供了两套事件处理机制:

1.基于监听的事件处理。

2.基于回调的事件处理。

基于监听的事件处理就是在android的组件上绑定特定的监听器,而基于回调的事件处理就是重写UI组件或者Activity的回调方法。

基于回调的事件处理用于处理一些具有通用性的事件,基于监听的事件处理用于处理与具体业务相关的事件。

事件处理模型

事件处理模型中,主要涉及三类对象:

1.EventSource(事件源)。事件发生的场所,通常就是各个组件,比如按钮、窗口、菜单。

2.Event(事件)。事件封装了事件发生的相关信息。

3.EventListener(事件监听器)。监听事件源发生的事件,并对事件作出相应的响应。

基于回调的事件处理模型就是将EventSource和EventListener合二为一了,即事件源也是事件监听器(处理器)。

下面通过一个例子演示两种事件处理模型。

Activity类:

package com.zzj.ui.eventhandledemo;  

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;  

import com.zzj.ui.R;  

public class EventHandleActivity extends Activity {  

    private EditText editText;  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);  

        setContentView(R.layout.event_handle_activity);  

        editText = (EditText) findViewById(R.id.editText1);
        editText.setOnKeyListener(new OnKeyListener() {  

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    System.out.println("EditText.onKeyDown --> "
                            + ((EditText) v).getText());
                } else if (event.getAction() == KeyEvent.ACTION_UP) {
                    System.out.println("EditText.onKeyUp --> "
                            + ((EditText) v).getText());
                }
                return false;
            }
        });
    }
}  

重写EditText:

package com.zzj.ui.eventhandledemo;  

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;  

public class MyEditText extends EditText {  

    public MyEditText(Context context) {
        super(context);
    }  

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }  

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }  

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        System.out.println("MyEditText.onKeyDown --> "
                + this.getText().toString());
        return super.onKeyDown(keyCode, event);
    }  

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        System.out.println("MyEditText.onKeyUp --> "
                + this.getText().toString());
        return super.onKeyUp(keyCode, event);
    }  

}  

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >  

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="input"
        android:inputType="text" >
    </EditText>  

    <com.zzj.ui.eventhandledemo.MyEditText
        android:id="@+id/myEditText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="input"
        android:inputType="text" />  

</LinearLayout> 

界面:

运行程序,在两个输入框中分别输入abc,查看日志:

可以看到,基于监听的事件处理和基于回调的事件处理达到了相同的效果。

需要注意的是,以上事件处理,只对硬键盘有效,对软键盘无效。

另外,基于回调的事件处理代码简洁,但不能访问外围类的资源;而基于监听的事件处理,可以把监听器作为内部类而存在,这样就可以访问外围类的资源了。

基于监听的事件处理是一种委派式(Delegation)的事件处理方式。UI组件(事件源)将发生的事件委派给特定的对象(监听器)处理,这很类似于人类社会的分工协作。例如某商场发生火灾时,商场并不会处理该事件,而是交给消防局处理;商场发生斗殴事件时,就交给公安局处理。商场可以将不同的事件委派给不同的机构处理,同时消防局和公安局也可以对各种场所进行监听并且处理发生的事件。这种委派式的事件处理方式将事件源和监听器分离,能提高程序的可维护性。

时间: 2024-10-22 01:47:21

【Android】基于监听的事件处理和基于回调的事件处理、两者的区别的相关文章

Android基础入门教程——3.1 基于监听的事件处理机制

Android基础入门教程--3.1.1 基于监听的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言: 第二章我们学习的是Android的UI控件,我们可以利用这些控件构成一个精美的界面,但是仅仅是界面而已:下一步就要开始学习逻辑与业务实现了,本章节讲解的是Android的事件处理机制!何为事件处理机制?举个 简单的例子,比如点击一个按钮,我们向服务器发送登陆请求!当然,Android中的事件处理机制不止这一种, 比如屏幕发生选择,我们点击了屏幕上某个区域-简单点说,事件处

Android的事件处理机制详解(二)-----基于监听的事件处理机制

基于监听的事件处理机制 前言: 我们开发的app更多的时候是需要与用户的交互----即对用户的操作进行响应 这就涉及到了android的事件处理机制; android给我们提供了两套功能强大的处理机制: ①基于监听的事件处理机制 ②基于回调的事件处理机制 在这一节中,我们会先介绍一下基于监听的事件处理机制 好了,废话不多说! 我们要先了解一下监听处理机制的模型 监听的处理模型: 处理模型图: 文字表述: 事件监听机制中由事件源,事件,事件监听器三类对象组成 处理流程: step 1:为某个事件源

Android 开发事件响应之基于监听的事件响应

Android 开发事件响应之基于监听的事件响应 本文将介绍Android 操作系统如何通过监听来实现对事件的响应. Android 开发事件响应之基于监听的事件响应 背景介绍 Android 开发事件响应类型 内部类 匿名内部类 外部类 直接绑定标签 总结 背景介绍 对于任何可视化开发来说,都会涉及到对控件的响应.我们通过举例:实现对Button 按钮的点击来讲解Android 里面对事件相应的办法. Android 开发事件响应类型 在Android 开发中,有两种方式可以对事件作出响应,分

Android_基于监听的事件处理机制

一.引言 在经过几天的学习之后, 首先熟悉了几大基本布局以及一些常用控件的使用方法,目前正在学习如何实现一个基本的登录注册界面及其功能,而实现功能就需要我们采用事件处理机制来进行调用事件处理方法.以下,就是我总结的一些事件处理机制. 二.常用监听接口 View.OnClickListener  单击事件监听器必须实现的接口 View.OnCreateContextMenuListener  创建上下文菜单事件 View.OnFocusChangeListener  焦点改变事件 View.OnK

Android 事件监听处理

事件监听的处理模型包含三个成员:事件源.事件以及事件监听器. 基于监听的事件处理模型一般包含几个步骤: 1.获取普通界面组件: 2.实现事件监听器类 3.将监听器对象注册给普通组件 当事件源上发生指定事件的时候,Android就会触发对应事件监听器,并由事件监听器调用相应的方法来处理事件. public class RemoteControlActivity extends Activity { EditText ipET; EditText socketET; Button button; @

Android怎样监听蓝牙耳机的按键事件

写在前面: 直接想要代码非常easy,你直接把滚动栏拉到最底端就能够看到.假设想要十分地了解为什么,那就依照我规划的一步一步来理解.下面測试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的使用 蓝牙耳机的使用说明书中都会有相关的具体使用说明,这里拣重点说明一下.除了电源开关,耳机上一般有三个键.例如以下所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/40

Android如何监听蓝牙耳机的按键事件(转)

源: Android如何监听蓝牙耳机的按键事件 写在前面: 直接想要代码很简单,你直接把滚动条拉到最底端就可以看到.如果想要十分地了解为什么,那就按照我规划的一步一步来理解.以下测试环境以手头上有的「Bluedio + 红米手机」. 1.蓝牙耳机的使用 蓝牙耳机的使用说明书中都会有相关的详细使用说明,这里拣重点说明一下.除了电源开关,耳机上一般有三个键.如下所示: 它们每个都是多功能键,在不同的情况下有不同的功能.1号键的功能包括:开始播放音乐/停止插入音乐/接听电话/挂断电话:2号键的功能有:

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

Android:监听ListView

本文目录 监听ListView点击事件 监听ListView滚动事件 监听ListView点击事件 使用监听器OnItemClickListener package com.example.testsend; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView.OnIte