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实现。)
下面的例子说明了如何为一个按钮注册一个点击侦听器:
-
// Create an anonymous implementation of OnClickListener
-
private OnClickListener
mCorkyListener
=
new
OnClickListener() {
-
public void onClick(View v) {
-
// do something when the button is clicked
-
}
-
};
-
protected void onCreate(Bundle savedValues) {
-
...
-
// Capture our button from layout
-
Button
button
= (Button)findViewById(R.id.corky);
-
// Register the onClick listener with the implementation above
-
button.setOnClickListener(mCorkyListener);
-
...
-
}
你可能会发现把OnClickListener作为活动的一部分来实现会便利的多。这将避免额外的类加载和对象分配。比如:
-
public class ExampleActivity extends Activity implements OnClickListener {
-
protected void onCreate(Bundle savedValues) {
-
...
-
Button
button
= (Button)findViewById(R.id.corky);
-
button.setOnClickListener(this);
-
}
-
// Implement the OnClickListener callback
-
public void onClick(View v) {
-
// do something when the button is clicked
-
}
-
...
-
}
注意上面例子中的onClick()回调没有返回值,但是一些其它Android事件侦听器必须返回一个布尔值。原因和事件相关。对于其中一些,原因如下:
· onLongClick() – 返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步处理它。也就是说,返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-click侦听器。
· onKey() –返回一个布尔值来指示你是否已经消费了这个事件而不应该再进一步处理它。也就是说,返回true 表示你已经处理了这个事件而且到此为止;返回false 表示你还没有处理它和/或这个事件应该继续交给其他on-key侦听器。
· onTouch() -
返回一个布尔值来指示你的侦听器是否已经消费了这个事件。重要的是这个事件可以有多个彼此跟随的动作。因此,如果当接收到向下动作事件时你返回
false,那表明你还没有消费这个事件而且对后续动作也不感兴趣。那么,你将不会被该事件中的其他动作调用,比如手势或最后出现向上动作事件。
记住按键事件总是递交给当前焦点所在的视图。它们从视图层次的顶层开始被分发,然后依次向下,直到到达恰当的目标。如果你的视图(或者一个子视图)
当前拥有焦点,那么你可以看到事件经由dispatchKeyEvent()方法分发。除了从你的视图截获按键事件,还有一个可选方案,你还可以在你的活
动中使用onKeyDown() and onKeyUp()来接收所有的事件。
注意: Android 将首先调用事件处理器,其次是类定义中合适的缺省处理器。这样,从这些事情侦听器中返回true 将停止事件向其它Android事件侦听器传播并且也会阻塞视图中的缺事件处理器的回调函数。因此当你返回true时确认你希望终止这个事件。
分享到:
相关推荐
javascript事件侦听器 事件侦听器就是用来处理事件的,可以接收事件携带的信息,并在接收的该事件后执行特定的代码。 那么这个事件侦听器到底能有什么作用的,现在我就来给大家介绍下事件侦听器的一个用法: 在...
在 EventEmitter 上发出事件,其中侦听器可能包含回调函数 一个asyncEmit()函数,它接受一个 EventEmitter、一个 args 数组和一个回调函数。 如果发射器侦听器函数具有 arity > args.length,则发射器上有一个假定的...
Dojo基础2事件侦听器 通过Dojo的事件处理机制可以让我们更好更快的处理web开发中的事件,特别是它的预定发布通信方式,在多个匿名通信的情况下,用该方式可更快捷的实现功能。
众所周知,世界上97%的台式机上都安装有Flash Player,利用包含Flash创作工具、渲染引擎和已建立的超过200万的设计者和开发者群体的Flash平台生态系统,我们可以制作出各式各样的Flash动画。Adobe推出了flash最新...
注释方法以用作传感器事件的侦听器。 有四种可能的注释:@OnSensorChanged、@OnAccuracyChanged、@OnSensorNotAvailable和@OnTrigger。带注释的方法必须具有Sensors Overview Android 文档中指定的方法签名。 有关...
Android Listener侦听的N种写法
matlab开发-单个事件侦听器和Matlabui的SimulinksignalView。本演示演示如何使用块侦听器在matlab用户界面中查看模型信号。
它将侦听器回调附加到一个或多个属性(或多个属性)获取或设置事件。 可接受的事件是 PreGet、PreSet、PostGet 和 PostSet,它们在句柄属性值上的 get/set 事件之前/之后立即触发。 例子: proplistener(gcf,{'...
Servlet上下文和侦听器
为了支持侦听器,对象需要维护一个已登记的侦听器列表,提供侦听器登记和取消登记的手段,并在适当的事件发生时调用每个侦听器。使用和支持侦听器很容易,但是在登记接口的两边都应当避免一些缺陷。侦听器涉及的任何...
多线程 TCP/IP 侦听器
这是关于jsp中比较重要的章节内容 主要是侦听器和过滤器的东西 里面有讲解很详细的 还有部分代码供大家参考
自定义事件侦听器项目模板 此存储库包含一些自定义事件侦听器类,用于演示
非常小且简单的工具类用于将事件侦听器绑定到元素
symfony-json-request-transformer, 用于解码JSON编码请求内容的Symfony 2事件侦听器 symfony-json-request-transformer用于解码JSON编码请求内容的Symfony事件侦听器。 请阅读关于这里知识库的博客文章,位于 /...
动作脚本事件处理函数共有两类:事件处理函数方法和事件侦听器,要明白事件侦听器的概念,必须首先理解线性编程和事件驱动编程的区别;
完成的 HTTP请求关闭,完成或错误时执行回调。安装这是通过提供的模块。 使用完成 : $ npm install on-finishedAPI var onFinished = require ( 'on-finished' )onFinished(res,侦听器) 附加一个侦听器以侦听...
经SerialTrace侦听、拦截得到的信息,完全符合RS232/422/485接口标准。 <br>SerialTrace支持串行中继功能,可拦截两台设备间的通信信息。其原理是,利用计算机的两个串口分别与两台设备互联,通过SerialTrace进行...
JMS侦听器 介绍关于侦听器的资料