android如何使用 java 中的多个类中的一个接口?

发布时间: 2017/3/19 14:02:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 activity 和 2 fragment

我想,当 activitylistener.receivePreview(obj) 然后

  1. 执行︰ OneFragment-receivePreview >。
  2. 执行︰ TwoFragment-receivePreview >。
public class MainAct extends AppCompatActivity {
    public interface OnReceiveListener {
        // This can be any number of events to be sent to the activity
        void receivePreview(Object... obj);
    }
    private OnReceiveListener listener;


}

public class OneFragment extends Fragment implements OnReceiveListener{

    @Override
    public void receivePreview(Object... obj) {

    }
}

public class TwoFragment extends Fragment implements OnReceiveListener{

    @Override
    public void receivePreview(Object... obj) {

    }
}

解决方法 1:

我认为你可以使用观察者模式,是一个好的习惯,你的情况。

GoF 所述︰

"一多依赖项对象之间定义以便当一个对象改变状态,其所有的家属都通知和自动更新"。

阅读更详细的http://www.java2blog.com/2013/02/observer-design-pattern-in-java.html#TLio7G2ruqxvfZUR.99

在你的情况你有这样的关系 (一对多) 和事件发生时在 activity 你要意识到那两个 fragment

enter image description here

fragments是实现观察者类和你 activity 已如上面的数字说明中的主体作用。

我希望这能帮你到实现您的代码中非常不错的办法。 一些教程可以在以下链接中的找到︰

https://dzone.com/articles/observer-pattern-java http://www.tutorialspoint.com/design_pattern/observer_pattern.htm

编辑︰ 在给定的情况下︰

public interface OnReceiveListener { // this is your observer interface  !
        // This can be any number of events to be sent to the activity
        void receivePreview(Object... obj);
    }

Fragment处于这种设计模式的正确定义,所以我不改变他们的代码︰

公共类扩展了 OneFragment Fragment 实现 OnReceiveListener {

@Override
public void receivePreview(Object... obj) {

}

}

public class TwoFragment extends Fragment implements OnReceiveListener{

@Override
public void receivePreview(Object... obj) {

}

你需要有对fragment的引用 activity (作为观察员)。

ArrayList< OnReceiveListener > observers =  new ArrayList< OnReceiveListener>();

事实上观察员可以订阅或自身注册到一个主题 ( fragment 对引用 activity (最好使用单例模式 !: D)。 像下面这样︰

public class MainAct extends AppCompatActivity {
private static MainAct instance;

public static MainAct getInstance() {
 if(instance != null)
    return instance;
}

// I think it is better to create the instance variable in the onCreate() method of the MainAct activity

onCreate(...)
{
.
.
.
instance = this;
...
}

public void registerObserver(OnReceiveListener observer){
observers.add(observer)

}

notifyObservers(){
// call this method in the listener you want 

for( Observer obser : observers)
    obser. receivePreview(param )

}
...

fragment 初始化︰ MainAct.getInstance().registerObserver(this)

官方微信
官方QQ群
31647020