首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从侦听器列表中删除侦听器

从侦听器列表中删除侦听器
EN

Stack Overflow用户
提问于 2019-03-25 12:31:24
回答 1查看 1.3K关注 0票数 0

我有一个函数将自定义侦听器添加到同一个触发器事件中。

所以同一个事件可以触发多个侦听器,这是可行的。我想要的是:如果我有3个侦听器(例如),就可以删除其中的一个,让另外两个可以工作。

这是我添加事件的函数,它们在一个Map<String, CustomListener>变量中。

代码语言:javascript
复制
void addEventListener(String eventName, EventListener eventListener) {
    List<eventListener> eventListenerList = new ArrayList<>();

    if (eventListenerMap.containsKey(eventName)) {
        eventListenerList = eventListenerMap.get(eventName);
    }
    Objects.requireNonNull(eventListenerList).add(eventListener);
    eventListenerMap.put(eventName, eventListenerList);
}

这是我要删除的功能

代码语言:javascript
复制
void removeEventListener(String eventName, EventListener eventListener) {
    if (eventListenerMap.containsKey(eventName)) {
        List<InsEventListener> eventListenerList = eventListenerMap.get(eventName);
        assert eventListenerList != null;
        eventListenerList.remove(eventListener);

        eventListenerMap.put(eventName, eventListenerList);
    }
    else {
        Log.w("Remove Event Listener:", "Event not found");
    }
}

正如您在下面的图片中所看到的,它识别相同的类和相同的lamba地址,但它不会删除。

所有的侦听器都在同一个地方调用相同的函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-25 12:46:44

这是因为eventListenerList.remove(eventListener.getClass());没有删除任何东西。您不应该通过类来删除侦听器,而是通过索引或区分它们的方法来删除它们。

如果检查remove()返回值,就会得到false,这意味着参数不在该列表中。oracle文档

通常,对象可以通过两种方式从ArrayList (或通常是任何列表)中删除,即索引(remove(int))和对象(remove( object ))。参考在这里

您需要做的:

EventListener类中添加一个等于(对象)方法。这将允许您执行eventListenerList.remove(eventListener)来标识正确的对象。

我认为最简单的方法是在父类中添加一个名称或id属性,这个属性在所有侦听器之间都是唯一的,并且覆盖那些属性检查的等号。

您可以轻松地使用Android生成equals(object)方法,按Ctrl +O并选择相等的方法。

编辑:

我建议为侦听器处理ID的两个选项:

  1. addEventListener中自己生成ID并返回给调用者,将侦听器存储在地图中而不是列表中,关键是ID。当有人想要删除侦听器时,他会发送生成的ID,而您将从事件的监听器映射中删除它。
  2. addEventListener中自己生成ID,并将其保存在其他任何人都无法更改的EventListener ID属性中。然后,要删除特定的侦听器,只需实现一个检查ID属性的equals方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55337852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档