java - java中的监听器是如何工作的

标签 java android

我想知道是否可以为监听器创建监听器。例如,如果我有一个按钮的监听器,我可以为该监听器创建一个监听器,以便一旦按下按钮,按钮监听器的监听器就会收到通知。

我的另一个担忧是,如果我有一个函数调用,其中有一些监听器,这些监听器会在函数调用返回时被销毁。例如,我可以在程序开头调用一个函数,该函数具有主程序中的监听器吗?

最佳答案

当然可以。监听器或“观察者模式”非常简单。观察者模式真正做的就是使用接口(interface)创建一个“契约”,让每个人都知道某个类实现了某个方法,这样您就可以确信可以在该对象上调用它。

例如,您可以创建两个这样的接口(interface):

public interface OnClickListener {
   public void onClick();
}

public interface SomeOtherListener {
   public void onFoo();
}

希望“触发”这些方法的代码必须引用这些监听器。通常,这是通过公开一些公共(public)方法来“设置监听器”来完成的。因此,在某些类(class)中,您将拥有 public void setOnClickListener() { this.onClickListener =listener; } 实现监听器的类现在可以调用 setListener(this)。请注意,“this”在这里起作用是因为 Java 中的接口(interface)提供了这种多态性。您可以将一个类转换为它实现的任何父类(super class)或接口(interface)。因此,例如在想要调用“onClick”的类中,它所关心的是包含“onClick”的类是一个“onClickListener”。这就是类(class)所关心的。现在,只要您实现“onClick”的类具有对 SomeOtherListener 的引用(通过之前注册),那么 onClick 就可以调用 someOtherListener.onFoo();

因此,简而言之,(尽管在某些情况下这可能是一个糟糕的设计)从技术上讲,只要您进行设置,您就可以拥有任意数量的相互关联的监听器,以便相关对象/类具有对那些监听器的引用他们需要。

抱歉,如果这有点令人困惑。此外,如果没有更多关于您到底想要做什么的详细信息,很难提供更详细的解释。

编辑

据我所知,不可能设置一些“包罗万象”来记录 Android 应用程序中的每个 GUI 事件。由于接口(interface)方法被声明为必须实现的空方法,因此您必须在实现中指定您想要的精确日志记录并从那里开始。例如,您当然可以修改 Android 源代码以在每次调用 setOnClickListener 时记录一些内容,但我无法想象这会非常有用。此外,这还隐含着您需要对每种可用的监听器类型执行此操作。只有您实现的监听器才可用于任何类型的日志记录。例如,如果您不实现 onTouch,则不会显示任何日志记录...

关于java - java中的监听器是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124959/

相关文章:

java - Android:变量在while循环中的值不正确

java - 执行WAR文件时出错

java - android - 将水平viewpager与垂直viewpager结合起来

java - Android donut chart 根据时间戳填充多种颜色

java - 获取 JSON 格式的 POST 结果

java - 在资源文件夹Java中插入图像

android - 单击按钮时删除 RecyclerView 中的所有内容

android - 在android中显示图像和管理内存

java - 从服务中检索的日期格式

java - 将 uri 转换为位图时出现 "No content provider execution "错误