【问题标题】:listener vs handler in androidandroid中的侦听器与处理程序
【发布时间】:2012-06-21 12:04:12
【问题描述】:

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

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

我也浏览了以下链接:

Are event handler, event listener, and event registration all referring to the same thing?

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

【问题讨论】:

  • 进一步解释:我想在两个进程之间交换一些数据。我该怎么做?通过侦听器或处理程序??
  • 监听器调用处理程序。一旦它正在侦听的操作完成,侦听器就会调用一个包含处理程序逻辑的新线程。所以要在两个进程之间进行对话,你需要将一个进程注册到另一个进程,为你正在等待的动作创建一个监听器对象,然后编写一个处理程序来执行处理事件的代码。
  • 我有一些数据从另一个进程传输到另一个进程。我已经处理了数据并且必须将其发回。那我怎么寄回去。??通过广播事件??
  • @KazekageGaara op 在问题 o_O 中链接了该帖子

标签: android listener handler event-listener


【解决方案1】:

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

事件处理程序

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

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

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

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

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

您也可以查看yahoo answer

【讨论】:

  • OP 不是问 Android 和 ActionScript 有什么区别吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多