android - 一个类(class)的多个听众

标签 android interface listener

我想每个人都知道监听器接口(interface)模式。我有一个类,其中包含用户可以添加或删除的一些最喜欢的项目。

在这门课上我有:

public static OnFavsChangedListener onFavsChangedListener; 

public interface OnFavsChangedListener {
    abstract void onFavsChanged();
}

public static void setOnFavsChangedListener(
        OnFavsChangedListener listener) {
    onFavsChangedListener = listener;
}

public void addToFavorites () {
    if (onFavsChangedListener != null) {
        onFavsChangedListener.onFavsChanged()
    }
}

当我只需要使用其中一个监听器时,这非常有效,当我使用来自不同 ActivitiessetOnFavsChangedListener 时,它们将覆盖最后一个。

我的想法是使用一个 ArrayList 监听器并在我的 Favs 改变时调用它们,但是很难不让 ArrayList 变得太大( Activity 可能会在每次方向更改时添加一个监听器/onCreate)。我可以使用 ID 和监听器的 HashMap,让每个 Activity 删除它的监听器 onDestroy,但这看起来很笨拙。

TL;DR:当我的 Fav 发生变化时,有什么优雅的方式可以通知多个 Activity

最佳答案

这对于您的用例来说可能有点矫枉过正,但是为了通知类有关事件我使用事件总线(特别是 https://github.com/greenrobot/EventBus )。

这允许您简单地发布一条消息,并且每个已注册接收该类型消息的类(class)都会收到它。使用起来非常简单,就库而言非常小。

关于android - 一个类(class)的多个听众,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17047627/

相关文章:

Android PayPal SDK 和 fragment

Cordova 4.0 config.xml 中的 Android 权限

android - 自定义适配器不工作

java - 在运行时使用反射覆盖方法级别@annotation,适用于类级别

generics - 语法 : multiple generic constraints and inheritance, 接口(interface)

java - 删除 Firebase java 中的所有监听器

Android - 全局布局监听器不工作

android - 如何使用 float 文本自定义微调器

java - 如何参数化Comparable接口(interface)?

java - caretPositionChanged() 方法没有反应