gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:49:43 24 4
gpt4 key购买 nike

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

我有三个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com