Android:用Greenrobot EventBus如何在2个Activity之间进行通信?

时间:2015-09-04 16:13:16

标签: android android-activity greenrobot-eventbus

我想在2活动之间进行沟通。两者都是register()和unregister()方法:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

当我点击列表(项目选择)时,ActivityB启动。 ActivityB的目的是更新一些信息,并将这些新信息发送给ActivityA;所以在ActivityB中我打电话:

EventBus.getDefault().post(new MyNewEvent(bla bla bla));

在我的ActivityA中,我有这个方法:

public void onEvent(MyNewEvent event) {
    ...
}

不幸的是,从未调用此方法onEvent。为什么?因为当ActivityB启动时,调用ActivityA中的方法onStop(),所以完成了对总线的取消注册...

那么如何通过使用EventBus在这两个Activity之间进行通信?

谢谢你们!

2 个答案:

答案 0 :(得分:5)

你可以通过使用Sticky Events来实现这一点。

http://greenrobot.org/eventbus/documentation/configuration/sticky-events/

基本上,您在活动B上发布了一个粘贴.postSticky()的事件,当活动A再次注册时,它会自动收到该粘性事件。

但正如@ jlhonora的回答所述,startActivityForResult可能更适合您的需要。

答案 1 :(得分:3)

正如您已经想到的那样,您无法使用EventBus在两个活动之间进行通信,因为您无法同时注册事件。

startActivityForResult模式更适合您尝试实现的目标:http://developer.android.com/reference/android/app/Activity.html#StartingActivities