`
zhubin215130
  • 浏览: 142331 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]Android事件侦听器回调方法浅谈

阅读更多
    Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick();onLongClick();onFocusChange();onKey();onTouch();onCreateContextMenu()等等。

Android 操 作系统中,对于事件的处理是一个非常基础而且重要的操作。许多功能的实现都需要对相关事件进行触发才能达到自己的目的。比如Android事件侦听器是视 图View类的接口,包含一个单独的回调方法。这些方法将在视图中注册的侦听器被用户界面操作触发时由Android框架调用。下面这些回调方法被包含在 Android事件侦听器接口中:

onClick()

包含于View.OnClickListener。当用户触摸这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后按下“确认”键或者按下跟踪球时被调用。

onLongClick()

包含于View.OnLongClickListener。当用户触摸并控制住这个item(在触摸模式下),或者通过浏览键或跟踪球聚焦在这个item上,然后保持按下“确认”键或者按下跟踪球(一秒钟)时被调用。

onFocusChange()

包含于View.OnFocusChangeListener。当用户使用浏览键或跟踪球浏览进入或离开这个item时被调用。

onKey()

包含于View.OnKeyListener。当用户聚焦在这个item上并按下或释放设备上的一个按键时被调用。

onTouch()

包含于View.OnTouchListener。当用户执行的动作被当做一个触摸事件时被调用,包括按下,释放,或者屏幕上任何的移动手势(在这个item的边界内)。

onCreateContextMenu()

包含于View.OnCreateContextMenuListener。当正在创建一个上下文菜单的时候被调用(作为持续的“长点击”动作的结果)。参阅创建菜单Creating Menus章节以获取更多信息。

这些方法是它们相应接口的唯一“住户”。要定义这些方法并处理你的事件,在你的活动中实现这个嵌套接口或定义它为一个匿名类。然后,传递你的实现的 一个实例给各自的View.set...Listener() 方法。(比如,调用setOnClickListener()并传递给它你的OnClickListener实现。)

下面的例子说明了如何为一个按钮注册一个点击侦听器:

  1. // Create an anonymous implementation of OnClickListener  
  2. private OnClickListener  mCorkyListener  =  new  OnClickListener() {  
  3. public void onClick(View v) {  
  4. // do something when the button is clicked  
  5. }  
  6. };  
  7. protected void onCreate(Bundle savedValues) {  
  8. ...  
  9. // Capture our button from layout  
  10. Button  button  = (Button)findViewById(R.id.corky);  
  11. // Register the onClick listener with the implementation above  
  12. button.setOnClickListener(mCorkyListener);  
  13. ...  

你可能会发现把OnClickListener作为活动的一部分来实现会便利的多。这将避免额外的类加载和对象分配。比如:

  1. public class ExampleActivity extends Activity implements OnClickListener {  
  2. protected void onCreate(Bundle savedValues) {  
  3. ...  
  4. Button  button  = (Button)findViewById(R.id.corky);  
  5. button.setOnClickListener(this);  
  6. }  
  7. // Implement the OnClickListener callback  
  8. public void onClick(View v) {  
  9. // do something when the button is clicked  
  10. }  
  11. ...  

注意上面例子中的onClick()回调没有返回值,但是一些其它Android事件侦听器必须返回一个布尔值。原因和事件相关。对于其中一些,原因如下:

· onLongClick() – 返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步处理它。也就是说,返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-click侦听器。

· onKey() –返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步处理它。也就是说,返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-key侦听器。

· onTouch() - 返回一个布尔值来指示你的侦听器是否已经消费了这个事件。重要的是这个事件可以有多个彼此跟随的动作。因此,如果当接收到向下动作事件时你返回 false,那表明你还没有消费这个事件而且对后续动作也不感兴趣。那么,你将不会被该事件中的其他动作调用,比如手势或最后出现向上动作事件。

记住按键事件总是递交给当前焦点所在的视图。它们从视图层次的顶层开始被分发,然后依次向下,直到到达恰当的目标。如果你的视图(或者一个子视图) 当前拥有焦点,那么你可以看到事件经由dispatchKeyEvent()方法分发。除了从你的视图截获按键事件,还有一个可选方案,你还可以在你的活 动中使用onKeyDown() and onKeyUp()来接收所有的事件。

注意: Android 将首先调用事件处理器,其次是类定义中合适的缺省处理器。这样,从这些事情侦听器中返回true 将停止事件向其它Android事件侦听器传播并且也会阻塞视图中的缺事件处理器的回调函数。因此当你返回true时确认你希望终止这个事件。

分享到:
评论

相关推荐

    matlab开发-单个事件侦听器和Matlabui的SimulinksignalView

    在MATLAB开发中,事件侦听器是一种强大的工具,它允许程序对特定事件做出响应,例如数据更改或用户交互。本教程重点介绍了如何利用单个事件侦听器以及MATLAB UI(用户界面)中的Simulink Signal Viewer来增强模型的...

    async-emit:在 EventEmitter 上发出事件,其中侦听器可能包含回调函数

    在 EventEmitter 上发出事件,其中侦听器可能包含回调函数 一个asyncEmit()函数,它接受一个 EventEmitter、一个 args 数组和一个回调函数。 如果发射器侦听器函数具有 arity > args.length,则发射器上有一个假定的...

    Dojo基础2事件侦听器

    接下来,我们讨论Dojo的事件侦听器方法——`dojo.connect`。这个方法允许我们将一个函数连接到另一个函数上,形成事件监听。例如,`dojo.connect(object, "method", context, "handler")`,其中`object`是目标对象,...

    FLASH高级编程视频教程-63.使用事件侦听器.rar

    众所周知,世界上97%的台式机上都安装有Flash Player,利用包含Flash创作工具、渲染引擎和已建立的超过200万的设计者和开发者群体的Flash平台生态系统,我们可以制作出各式各样的Flash动画。Adobe推出了flash最新...

    javascript事件侦听器

    事件侦听器通过`addEventListener`方法解决了这个问题,允许为同一事件添加多个处理函数,使得代码更加灵活。 `addEventListener`方法的基本语法如下: ```javascript element.addEventListener("事件类型", 事件...

    非常小且简单的工具类用于将事件侦听器绑定到元素

    在这个假设的`EventTools`类中,`addEventListenerToMultipleElements`方法接收元素的ID数组、事件类型以及事件处理函数,然后批量为这些元素添加事件侦听器,节省了编码时间。 此外,考虑到"其它杂项"的标签,这个...

    多线程 TCIIP 侦听器

    2. 创建TCP侦听器类,包含启动和停止侦听的方法以及处理连接的回调函数: ```vbnet Public Class TCPListener Private tcpListener As TcpListener Private serverPort As Integer Public Sub New(port As ...

    自定义事件侦听器

    例如,如果你正在创建一个音乐播放应用,可能会有"播放"、"暂停"、"停止"等自定义事件,相应的事件侦听器接口就会包含对应的处理方法,如onPlay()、onPause()、onStop()。 在实现自定义事件监听器时,你需要: 1. ...

    jsp中servlet过滤器和侦听器

    侦听器是用于监听特定事件的组件,当事件发生时,它们会自动执行相应的操作。例如,用户登录、会话创建或销毁等。常见的侦听器包括: - `HttpSessionListener`: 监听会话的创建和销毁。 - `ServletRequestListener`:...

    Android - Annotate 方法用作传感器的侦听器_Java_代码_相关文件_下载

    注释方法以用作传感器事件的侦听器。 有四种可能的注释:@OnSensorChanged、@OnAccuracyChanged、@OnSensorNotAvailable和@OnTrigger。带注释的方法必须具有Sensors Overview Android 文档中指定的方法签名。 有关...

    第六节 事件侦听.docx

    首先,`addEventListener`方法用于添加事件侦听器。在示例代码中,`instance.addEventListener(MouseEvent.CLICK, insClickHandler)`将`insClickHandler`函数注册为`instance`对象上的点击事件处理函数。每当发生...

    Android Listener侦听的N种写法

    ### Android Listener侦听的N种写法:深入解析与应用 在Android开发中,`Listener`接口是处理用户交互事件的核心机制之一。无论是点击、触摸还是其他类型的事件,`Listener`都提供了统一的处理方式。本文将围绕...

    AS2中的侦听器

    5. **添加侦听器(Adding a Listener)**:使用`addListener`方法将侦听器对象添加到广播器对象,以便接收事件通知。 例如,以下代码展示了如何创建一个侦听器对象并将其注册到广播器对象上,以便在鼠标点击时执行...

    浅谈Java图形界面事件处理的方法.pdf

    "浅谈Java图形界面事件处理的方法.pdf" Java 语言在图形界面设计中,事件处理是非常重要的一部分。事件处理是指用户与图形用户界面(GUI)之间的交互操作,即当用户触发某一事件时,系统做出的响应,对事件进行...

    PropListener - 向属性值获取/设置事件添加回调:将侦听器回调附加到属性值获取/设置事件-matlab开发

    它将侦听器回调附加到一个或多个属性(或多个属性)获取或设置事件。 可接受的事件是 PreGet、PreSet、PostGet 和 PostSet,它们在句柄属性值上的 get/set 事件之前/之后立即触发。 例子: proplistener(gcf,{'...

    多线程 TCP/IP 侦听器

    在IT领域,多线程TCP/IP侦听器是一种常见的网络通信工具,用于接收并处理来自多个客户端的并发连接。在VB.NET环境下,开发者可以利用System.Net.Sockets命名空间中的TcpListener类来实现这样的功能。本节将深入探讨...

    Servlet上下文和侦听器

    Servlet上下文和侦听器

    Java理论与实践:做个好的(事件)侦听器

    为了支持侦听器,对象需要维护一个已登记的侦听器列表,提供侦听器登记和取消登记的手段,并在适当的事件发生时调用每个侦听器。使用和支持侦听器很容易,但是在登记接口的两边都应当避免一些缺陷。侦听器涉及的任何...

    lwip的回调函数学习笔记与相关函数释疑

    在lwip中,回调函数是一种重要的机制,用于处理网络事件和数据传输。本文将详细介绍lwip的回调函数学习笔记与相关函数释疑。 一、tcp_listen 函数 tcp_listen 函数用于将一个 PCB 进入监听状态。当一个远端连接...

Global site tag (gtag.js) - Google Analytics