在片段中,我想接收消息,但从不使用Subscribe方法, 该方法不接收我发布的消息
片段代码:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Subscribe(threadMode = ThreadMode.BackgroundThread)
public void getMessage(Integer integer){
hotDao = new HotDao(this);
hotDao.getDataHot(null);
}
在MainActivity中,我发布了
代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
EventBus.getDefault().post(1);
loadView= (LoadView) findViewById(R.id.activity_guide_loadview);
startMainActivity();
}
答案 0 :(得分:1)
可能是因为在总线有足够的时间进行初始化之前发送了消息。
要检查一下,只需尝试通过执行类似
的操作来延迟帖子1秒或2秒(在您的MainAcytivity中)@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
loadView= (LoadView) findViewById(R.id.activity_guide_loadview);
startMainActivity();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(1);
}
}, 1500);
}
此外,您可以使用Sticky Event,以便即使在创建事件之前发送事件,您的片段也可以获取它。
编辑:正如BjörnKechel所述,正确的解决方案是将帖子放在MainActivity的onResume中。延迟仅用于检查在发送消息后总线是否已初始化的问题。
答案 1 :(得分:0)
您过早发布活动,请查看片段生命周期:
因此,如果你在onResume中调用它,你应该很高兴。另一种方法是使用Sticky Events
@Subscribe(sticky = true, threadMode = ThreadMode.BackgroundThread)