2015-09-04 62 views
3

我想在2 Activity之间进行沟通。两者都是寄存器()和注销()方法:Android:与Greenrobot EventBus如何在2 Activity之间进行通信?

@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之间进行通信呢?

谢谢你们!

回答

1

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

的startActivityForResult模式是你想达到什么更适合:http://developer.android.com/reference/android/app/Activity.html#StartingActivities

+0

感谢您的解释。所以事件总线并不是真正的Android组件之间进行通信的ultime选择。 – anthony

+0

这取决于。当我有很多非关键事件或与背景/异步任务进行通信时,我非常喜欢它。但是在进行活动间交流时,意向/结果是要走的路。 – jlhonora

+0

如果我们不能使用EventBus在活动之间进行通信,那么只需编写简单的EventController来处理所有活动中的事件即碎片。根本不需要使用EventBus。创建EventController类。使用CopyOnWriteArrayList存储EventListener引用。只需在所有活动中实现EventListener接口。 EventListener接口将包含一个名为handleEvent()的单个方法。 –

相关问题