我尝试在活动和片段之间使用greenrobot传递数据,但我找不到一个合适的教程来详细说明它是如何做的。 根据我到目前为止所读到的内容,我写了一些类似的东西,但它没有用。我可以使用绿色机器人将数据传递给尚未初始化的活动或片段吗?
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().post(new String("We are the champions"));
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
Activity_Lessons:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Some initializations
EventBus.getDefault().register(this);
//Other Stuff
}
public void onEventMainThread(String s){
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show();
}
这里永远不会调用事件处理程序。我做错了什么?
答案 0 :(得分:17)
EventBus有两种发布和注册事件的方法。如果活动或片段尚未初始化,我们可以使用registerSticky和postSticky而不是注册和发布。
这是我自己的更正代码:
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().postSticky(new String("We are the champions"));
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
Activity_Lessons:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Some initializations
EventBus.getDefault().registerSticky(this);
//Other Stuff
}
public void onEventMainThread(String s){
Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show();
}
答案 1 :(得分:2)
我想你忘了注册你的活动。
尝试添加以下内容: MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().post(new String("We are the champions"));
EventBus.getDefault().register(this);
Intent intent = new Intent("com.test.Activity_Lessons");
startActivity(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
答案 2 :(得分:2)
要添加Armin和David的答案,我只在编写了这样的订阅者注释后才postSticky
工作:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
的EventBus文档中所述
答案 3 :(得分:1)
Armin的回答(第一个被接受的答案是正确的)。
但如果您使用的是EventBus 3.0.0(目前是最新版本)或更高版本,则无法使用此功能:
EventBus.getDefault().registerSticky(this);
那是因为不推荐使用registerSticky方法,你可以使用这样的寄存器方法:
EventBus.getDefault().register(this);
希望这有助于开发人员使用最新的库和技术。 干杯!