1

リスナー インターフェイスのパターンは誰もが知っていると思います。ユーザーが追加または削除できるお気に入りのアイテムを含むクラスがあります。

このクラスには次のものがあります。

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

これは、これらのリスナーの 1 つだけを使用する必要がある場合にうまく機能します。setOnFavsChangedListener別のリスナーを使用Activitiesすると、最後のリスナーが上書きされます。

私のアイデアはArrayList、リスナーの を使用して、お気に入りが変更されたときにそれらすべてを呼び出すことでしたが、ArrayList大きくなりすぎないようにするのは難しいです (Activities向きが変わるたびにリスナーを追加する可能性があります / onCreate)。HashMapID とリスナーのa を使用して、すべてActivitの y でリスナーを削除することもできますonDestroyが、それは不器用に思えます。

TL;DR: お気に入りがActivities変更されたときに複数の人に通知するエレガントな方法は何ですか?

4

1 に答える 1

3

これはあなたのユース ケースではやり過ぎかもしれませんが、イベントについてクラスに通知するために、イベント バス (具体的にはhttps://github.com/greenrobot/EventBus ) を使用します。

これにより、メッセージを投稿するだけで、そのタイプのメッセージを受信するために登録されたすべてのクラスがそれを取得できます。使い方はとても簡単で、ライブラリに関してはかなり小さいです。

于 2013-06-11T15:15:11.373 に答える