我使用Greenrobot EventBus将事件从一个活动传递到另一个活动。
流程是这样的: Activity1开始 - >扫描条形码 - > Activity2开始 - >接受或拒绝回复并向活动1发送事件。
因此,Activity2通过执行以下操作向Activity1发送新事件:
@Override
public void onCreate(){
EventBus.getDefault().register(this);
// other initialization code
EventBus.getDefault().post(new MyEvent());
}
在Activity1中,我注册了事件总线,并且我还有公共的onEvent(MyEvent myEvent)方法来接收事件。
问题是onEvent未被触发。我看到可能在事件总线对象上存在问题(如活动1和2中的不同实例或某些实例),但它是相同的实例。
我不知道什么似乎是问题。如果有人可以看看并告诉我我做错了什么,我会非常感激。
谢谢!
答案 0 :(得分:7)
在这种情况下,您可能需要使用粘性事件。在Activity1启动Activity2之后,它会进入后台,并且无法再接收任何事件。
将它放在Activity1而不是EventBus.getDefault()。register(Object Event)
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().registerSticky(this);
}
并替换
EventBus.getDefault().post(new MyEvent());
使用在Activity2中
EventBus.getDefault().postSticky(new MyEvent());
答案 1 :(得分:3)
您的Activity1 EventBus取消注册如何?
由于我这样做,我遇到了同样的问题:
Activity1.java
@Override
protected void onStop() {
super.onStop()
EventBus.getDefault().unregister(this);
}
问题在于,当您启动Activity2 onStop
获取调用时,因此删除对该事件的订阅。我能够通过将取消注册移动到onDestroy来解决这个问题:
Activity1.java
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
答案 2 :(得分:0)
班级考试
public class TestEventBus {
private String label;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
活动A
TestEventBus t = new TestEventBus();
t.setLabel("oi");
EventBus.getDefault().post( t );
活动B
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(TestEventBus test) {
Toast.makeText(this, "label "+test.getLabel(),
Toast.LENGTH_SHORT).show();
};
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
答案 3 :(得分:0)
在要接收粘性事件的新版本中,设置 methods: {
async storeStaticContent() {
// This is where I fetch the content and write it away in the store.
const response = await fetch(`/static/content.json`);
const json = await response.json();
this.$store.commit(MUTATIONS.SET_CONTENT, json);
this.addRoute();
},
addRoute: function() {
this.$router.addRoutes(
[{
path: `/${store.getters.mainEntity}`,
name: store.getters.mainEntity,
component: EntityPage,
}]
);
}
},
标志sticky
:
true