gpt4 book ai didi

java - 从监听器列表中删除监听器

转载 作者:行者123 更新时间:2023-12-02 10:05:50 25 4
gpt4 key购买 nike

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

所以同一个事件可以触发多个监听器,这是有效的。我想要的是:如果我有 3 个监听器(例如)能够仅删除其中一个并让其他两个正常工作。

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

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);
}

这是我要删除的函数

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");
}
}

如下图所示,它会识别具有相同 lba 地址的同一类,但不会删除。

enter image description here

Obs:所有监听器都在同一位置的同一函数中调用

最佳答案

这是因为 eventListenerList.remove(eventListener.getClass()); 没有删除任何内容。您不应该通过监听器的类来删除监听器,而是通过索引或通过将它们彼此区分的方法来删除监听器。
如果您检查了 remove() 返回值,您将得到 false,这意味着该参数不在该列表中。 oracle documentation .

In general an object can be removed in two ways from an ArrayList (or generally any List), by index (remove(int)) and by object (remove(Object)). reference here

您需要做什么:

将 equals(Object) 方法添加到您的 EventListener 类中。这将允许您执行 eventListenerList.remove(eventListener) 来识别正确的对象。

我认为最简单的方法是向您的 Parent 类添加一个 name 或 id 属性,该属性在所有监听器之间都是唯一的,并覆盖检查这些属性的 equals 。

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

编辑:

我建议使用两种选项来处理听众的 ID:

  1. addEventListener中自己生成ID并将其返回给调用者,将监听器存储在映射而不是列表中,键是 ID。当有人想要删除一个监听器,他会发送生成的ID,你将删除它来自事件的监听器 map 。
  2. addEventListener 中自行生成 ID,并将其保存在其他任何人都无法更改的 EventListener ID 属性中。然后,要删除特定监听器,您只需实现一个检查 ID 属性的 equals 方法即可。

关于java - 从监听器列表中删除监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55337852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com