android中的监听器vs处理程序

sco*_*oby 9 android event-listener listener handler

监听器和处理程序有什么区别?

我搜索了很多,但我找不到合适的解释.我在哪里使用监听器以及在哪里使用Android中的处理程序?

我也经历了以下链接:

事件处理程序,事件监听器和事件注册都是指同一个东西吗?

我在哪里可以对这两个项目进行比较讨论?此外,任何人都可以告诉我有哪些不同类型的监听器和处理程序可用?

Bla*_*7B9 7

基本区别在于事件处理程序允许原始对象本身响应事件而执行某些操作,而事件侦听器允许其他对象执行某些操作以响应源自对象的事件.

例如:您的活动有一个按钮.如果您希望在某人触摸按钮时处理您的活动,则使用事件监听器(通过执行btn.setOnTouchListener(...)).但是,如果你想创建一个专门的按钮(例如,一个看起来像狗和触摸时吠叫的按钮),你可以创建一个Button的子类并实现它的事件处理程序onTouchEvent(...).在后一种情况下,按钮本身将处理其触摸事件.


GAM*_*AMA 2

许多 ActionScript 类都具有称为事件的功能。当特定事件发生时,对象会引发事件。例如,当某人将鼠标悬停在 SWF 中的按钮元件上时,会针对该特定 Button 实例引发 Button.onRollOver 事件。当鼠标移动到其他地方时,会针对同一实例引发 Button.onRollOut 事件。无论是否有人注意到,这些事件都会发生。如果您想实际执行某些操作来响应事件,则必须使用事件处理程序或事件侦听器来管理它。这两者之间的选择由对象 \xe2\x80\x94 决定,某些对象需要处理程序,某些侦听器 \xe2\x80\x94,因此如有疑问,请参阅 ol\xe2\x80\x99 ActionScript 语言参考。处理者相对容易,但由于某种原因,听众一开始似乎让人感到困惑。

\n\n

事件处理程序

\n\n

最流行的事件可能属于 Button 和 MovieClip 类,它们恰好共享许多相同的事件(影片剪辑可以是按钮,但反之则不然)。要处理 Button.onRelease 事件,您所要做的就是将按钮元件拖到舞台上,并通过属性检查器为其指定一个实例名称。在框架脚本中使用此名称将函数分配给事件。

\n\n
myButton.onRelease = function() {\n  // do something\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

其他 Button 事件的工作方式相同,MovieClip 事件和所有需要事件处理程序的事件也是如此。

\n\n

可以处理任意数量的事件。只需根据需要为每个事件分配一个函数即可。例如,响应翻转、释放和展开的按钮可能如下所示 \xe2\x80\xa6

\n\n
myButton.onRollOver = function() {\n  // do something\n}\nmyButton.onRelease = function() {\n  // do something\n}\nmyButton.onRollOut = function() {\n  // do something\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

事件监听器

\n\n

管理事件侦听器还需要几个步骤。侦听器是通过通用对象实例来完成的。该对象充当至少两个其他对象之间的联络人:引发事件的对象和侦听该事件的任何对象。让\xe2\x80\x99s 看一下MovieClipLoader 示例。

\n\n
var mcl:MovieClipLoader = new MovieClipLoader();\n
Run Code Online (Sandbox Code Playgroud)\n\n

此时,我们\xe2\x80\x99已经声明了一个变量mcl,它指向MovieClipLoader的一个实例。现在我们\xe2\x80\x99将声明另一个变量mclListener,它指向Object的实例。(我知道,这听起来很有趣,但是我们\xe2\x80\x99正在创建一个Object对象。)

\n\n
var mclListener:Object = new Object();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个通用对象现在将成为我们的联络人。此时,代码看起来与事件处理程序方法非常相似。

\n\n
mclListener.onLoadInit = function() {\n  // do something\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以从 MovieClipLoader 类中选择任何事件,这实际上并不重要。这里需要注意的是,通用对象正在代表操作类实例处理事件。通过事件处理程序,操作类实例可以处理它自己的事件。

\n\n

现在我们有了侦听器,并且已经代表我们的 MovieClipLoader 实例将一个函数分配给其事件之一,我们只需将侦听器订阅到 mcl 即可。

\n\n
mcl.addListener(mclListener);\n
Run Code Online (Sandbox Code Playgroud)\n\n

完毕。让\xe2\x80\x99s 一次性查看所有内容:

\n\n
var mcl:MovieClipLoader = new MovieClipLoader();\nvar mclListener:Object = new Object();\nmclListener.onLoadInit = function() {\n  // do something\n}\nmcl.addListener(mclListener);\n
Run Code Online (Sandbox Code Playgroud)\n\n

要监听多个事件,只需遵循事件处理程序方法即可。

\n\n
var mcl:MovieClipLoader = new MovieClipLoader();\nvar mclListener:Object = new Object();\nmclListener.onLoadStart = function() {\n  // do something\n}\nmclListener.onLoadProgress = function() {\n  // do something\n}\nmclListener.onLoadInit = function() {\n  // do something\n}\nmcl.addListener(mclListener);\n
Run Code Online (Sandbox Code Playgroud)\n\n

参考: http: //www.quip.net/blog/2006/flash/event-handlers-listeners

\n\n

您也可以查看这个雅虎答案

\n

  • OP没有问Android和ActionScript有什么区别吗? (5认同)