我试图将对象列表从ActivityTwo发送到MainActivity
我跟踪了EventBus的开始页面,并从onStart和onStop调用了register()和unregister()方法,然后使用EventBus.getDefault().post()发送数据。
在MainActivity上,除非我从onStop()中删除unregister()调用,否则不会得到任何信息。
我的问题是,我用得对吗?我应该打电话给unregister() in onDestroy()吗?如果是的话,如果活动停止了,他们为什么要从onStop调用它?
MainActivity
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(YoutubeData event) {
System.out.print(event);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}ActivityTwo
private void sendYoutubeData() {
if(youtubeData != null){
EventBus.getDefault().post(youtubeData);
finish();
}
}发布于 2017-03-10 15:57:19
如果您想在MainActivity中接收不可见的事件,是的,应该将register()和unregister()分别放在onCreate()和onDestroy()中。
如果您的事件没有侦听器,它将永远不会被接收,除非它是一个棘手的事件,在这种情况下,您将能够在注册时收到它。关于粘性事件这里的更多信息
发布于 2017-03-10 15:58:33
问题是,您必须使用事件总线的post行发布列表,然后必须在类中重写onEvent()。这里是一个有帮助的链接。
您需要做的是定义其他事件,例如
public static class MessageEvent { /* Additional fields if needed */ }现在,从获取数据的部分,您可以将其发布到事件中。
EventBus.getDefault().post(new MessageEvent());在您的活动中,您放置了一个订阅者函数,它将在将数据发布到事件总线时触发。在这里,您使用发布的数据
public void onMessageEvent(MessageEvent event) {/* Use the data*/};发布于 2017-03-10 15:59:28
您将不会得到任何事件,因为您处于活动二,这意味着您的第一个活动处于“停止”状态。根据您想要实现的目标,您可以尝试startActivityForResult或创建一个棘手的事件,但是我不建议使用事件总线来进行这样的简单操作,因为它可能导致严重的调试错误。
因此,我建议您使用选项1,使用startActivityForResult。
https://stackoverflow.com/questions/42722533
复制相似问题