9

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

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

我也浏览了以下链接:

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

我在哪里可以得到这两个项目的比较讨论?另外,谁能告诉我有哪些不同类型的监听器和处理程序可用?

4

2 回答 2

8

基本区别在于,事件处理程序让发起对象本身做某事以响应事件,而事件侦听器让其他对象做某事以响应源自对象的事件。

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

于 2012-09-28T19:26:46.393 回答
2

许多 ActionScript 类具有称为事件的功能。当某个事件发生时,对象会引发一个事件。例如,当有人将鼠标悬停在 SWF 中的按钮符号上时,会针对该特定 Button 实例引发 Button.onRollOver 事件。当鼠标移动到别处时,会为同一个实例引发 Button.onRollOut 事件。无论是否有人注意到,这些事件都会发生。如果您想实际做某事以响应事件,则必须使用事件处理程序或事件侦听器对其进行管理。这两者之间的选择是由对象决定的——一些对象需要处理程序,一些侦听器——所以如果有疑问,请点击 ol' ActionScript Language Reference。处理程序相对容易,但出于某种原因,听众一开始似乎让人们感到困惑。

事件处理程序

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

myButton.onRelease = function() {
  // do something
}

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

可以处理任意数量的事件。只需根据需要为每个事件分配一个功能。例如,响应翻转、释放和推出的按钮可能如下所示……</p>

myButton.onRollOver = function() {
  // do something
}
myButton.onRelease = function() {
  // do something
}
myButton.onRollOut = function() {
  // do something
}

事件监听器

管理事件侦听器需要更多步骤。一个监听器是用一个通用的 Object 实例来完成的。该对象充当至少两个其他对象之间的联络人:引发事件的对象和侦听事件的任何对象。让我们看一个 MovieClipLoader 示例。

var mcl:MovieClipLoader = new MovieClipLoader();

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

var mclListener:Object = new Object();

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

mclListener.onLoadInit = function() {
  // do something
}

我可以从 MovieClipLoader 类中选择任何事件,这真的没关系。这里要注意的是,一个通用对象代表操作类实例处理事件。使用事件处理程序,操作类实例处理它自己的事件。

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

mcl.addListener(mclListener);

完毕。让我们一起来看看:

var mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadInit = function() {
  // do something
}
mcl.addListener(mclListener);

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

var mcl:MovieClipLoader = new MovieClipLoader();
var mclListener:Object = new Object();
mclListener.onLoadStart = function() {
  // do something
}
mclListener.onLoadProgress = function() {
  // do something
}
mclListener.onLoadInit = function() {
  // do something
}
mcl.addListener(mclListener);

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

你也可以检查这个雅虎答案

于 2012-06-19T12:47:45.800 回答