Android:与Greenrobot EventBus 2Activity之间如何通信?
Android: with Greenrobot EventBus how to communicate between 2 Activity?
我想在 2 Activity 之间进行交流。两者都是 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 之间进行通信?
谢谢大家!
如您所知,您将无法使用 EventBus 在两个活动之间进行通信,因为您不能同时注册两个活动。
startActivityForResult 模式更适合您要实现的目标:http://developer.android.com/reference/android/app/Activity.html#StartingActivities
您实际上可以通过使用粘性事件来做到这一点。
http://greenrobot.org/eventbus/documentation/configuration/sticky-events/
基本上,您 post 在 Activity B 上使用 .postSticky()
粘性事件,当 Activity A 再次注册时,它将自动接收该粘性事件.
但如@jlhonora 的回答所述,startActivityForResult 可能更适合您的需要。
我想在 2 Activity 之间进行交流。两者都是 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 之间进行通信?
谢谢大家!
如您所知,您将无法使用 EventBus 在两个活动之间进行通信,因为您不能同时注册两个活动。
startActivityForResult 模式更适合您要实现的目标:http://developer.android.com/reference/android/app/Activity.html#StartingActivities
您实际上可以通过使用粘性事件来做到这一点。
http://greenrobot.org/eventbus/documentation/configuration/sticky-events/
基本上,您 post 在 Activity B 上使用 .postSticky()
粘性事件,当 Activity A 再次注册时,它将自动接收该粘性事件.
但如@jlhonora 的回答所述,startActivityForResult 可能更适合您的需要。