简体   繁体   English

在实现该方法的所有类上调用方法

[英]Call a method on all classes that implements that method

I have an Activity and 10 fragments. 我有一个Activity和10个片段。 I've created an interface and implement it on all Fragments. 我已经创建了一个接口并在所有Fragments上实现它。 How can I call that method on all Fragments from the Activity? 如何在Activity中的所有片段上调用该方法?

  public interface OnConnectListener {
      void isDeviceConnected(boolean b);
  }

UPDATE: 更新:

Using your suggestions I did this: 使用你的建议我做了这个:

public void isDeviceConnected(boolean b, List fragmentList) {
    for (OnConnectListener listener : getOnConnectListeners(fragmentList)) {
        listener.isDeviceConnected(b);
    }
}

public List<OnConnectListener> getOnConnectListeners(List fragmentList) {
    List<OnConnectListener> listeners = new ArrayList<>();
    for (Object o : fragmentList) {
        if (o instanceof OnConnectListener) {
            listeners.add((OnConnectListener) o);
        }
    }
    return listeners;
}

Now I just use: 现在我只使用:

isDeviceConnected(true, fragmentList);

Thank you so much. 非常感谢。

Assuming your "Activity" class holds a reference of 10 "onConnectListener" instances, you can loop thru each and call isDeviceConnected like so: 假设您的“Activity”类包含10个“onConnectListener”实例的引用,您可以循环遍历每个实例并调用isDeviceConnected,如下所示:

private List<onConnectListener> onConnectListeners;
....
for(onConnectListener onConnectListener: onConnectListeners) {
    onConnectListener.isDeviceConnected(true); // or false
}

By the way: Java naming conventions state that class names start with capital letters, and iterfaces usually start with the letter "I" So its best if you name your interface IOnConnectListener 顺便说一下:Java命名约定声明类名以大写字母开头,而且它们通常以字母“I”开头所以如果你命名你的接口IOnConnectListener它是最好的

This is perfect case for Observer pattern 这是观察者模式的完美案例

http://www.oodesign.com/observer-pattern.html http://www.oodesign.com/observer-pattern.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM