java - 多个 Activity 实现相同的监听器

标签 java android architecture mvp

我知道有类似的问题,但它仍然没有以我当前情况所需的方式回答我的问题。

我有三个 Activity 展示者,每个 Activity 展示者都需要远程调用某个数据,因此当数据到达时, Activity 展示者将回调 Activity 展示者。为了创建这个数据监听器,我创建了一个接口(interface)监听器,因为所有三个 Presenter 都请求相同的数据并检索它,所以所有三个 Presenter 都实现了这个接口(interface)监听器。

接口(interface)监听器:

interface ListenerInterface {

     onGotData();

}

主持人一:

class PresenterOne implements ListenerInterface{

    public void getData() {
        DataManager dataManager = new DataManager();
        dataManager.getData(this);
    }

    @Override
    public void onGotData(Data data) {
        //Do something with data
    }
}

演示者二与演示者一非常相似:

class PresenterTwo implements ListenerInterface{

    public void getData() {
        DataManager dataManager = new DataManager();
        dataManager.getData(this);
    }

    @Override
    public void onGotData(Data data) {
        //Do something with data
    }
}

假设 Presenter 3 与前一个完全相同。数据管理类:

class DataManager {

    public void getData(final ListenerInterface listener) {

        //Gets data
        addOnCompleteListener(new OnCompleteListener<Data data > () {
            @Override
            public void onComplete (@NonNull DataCall < Data > dataCall) {
                listener.onGotData(dataCall.getResults());
            }

        });
    }
}

这样做是否有人会调用所有三个演示者,因为接口(interface)是执行调用的接口(interface),还是只调用传递的演示者?如果我按照 way,有什么我应该担心的吗?如果哪位熟悉Android框架的人可以提供详细的答案,以便我可以从中学到更多,那就太好了。 我想这样做的原因是我想通过类之间的接口(interface)进行通信。

抱歉,如果这个问题对某些人来说很简单,但我仍在学习。

非常感谢您。

最佳答案

您可以使用 RxBus 实现来创建全局事件(例如您的 onGotData)。 首先,您必须创建 RxBus 类。

public class RxBus {
private static RxBus instance;
private PublishSubject<Event> subject = PublishSubject.create();

public static synchronized RxBus getInstance() {
    if (instance == null) {
        instance = new RxBus();
    }

    return instance;
}

private RxBus(){}

public void postEvent(Event event){
    subject.onNext(event);
}

public Observable<Event> getEvents(){
    return subject;
}

现在,您应该在 BaseActivity 或类似的东西中订阅它(取决于您的项目结构)。

private RxBus rxbus;
private Subscription rxBusSubscription;

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        rxBus = RxBus.getInstance();
    }

@Override
protected void onResume() {
    super.onResume();

    if (shouldSubscribeRxBus()) {
        rxBusSubscription = rxBus.getEvents()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(event -> {
                    if (event.getEventType() == Event.EventType.DATA_RECEIVED) {
                        onGotData(data);
                    }
                });
    }
}

现在根据需要实现 onGotData。

当你抓到数据时收到调用:

class DataManager {

public void getData(final ListenerInterface listener) {

    //Gets data
    addOnCompleteListener(new OnCompleteListener<Data data > () {
        @Override
        public void onComplete (@NonNull DataCall < Data > dataCall) {
            RxBus.getInstance().postEvent(new GotDataEvent(dataCall.getResults()));
        }

    });
}
}

您可以根据需要创建事件类结构。

关于java - 多个 Activity 实现相同的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021532/

相关文章:

java - 抽象类 - super 构造函数 (Java)

java - 如果端口对多播组无关紧要,为什么 DatagramSocket.joinGroup() 方法采用 SocketAddress?

android - 手机版和平板版之间复杂的界面逻辑切换——发布2个应用?

android - 为什么在 Android 模拟器上运行时 Firebase 在 PhoneGap 应用程序中返回 404 错误?

architecture - 有没有人在企业场景中使用过 Google Gears?

java - 如何添加 <soap :Envelope> and <soap:body> in xml request

Java 泛型列表

java - 如何从android中的纬度值中找到度数?

Javascript 我应该使用哪些其他技巧来代替导出符号

architecture - 无法弄清楚 Go 对象的组成