我知道有类似的问题,但它仍然没有以我当前情况所需的方式回答我的问题。
我有三个 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/