参考
只是写了最简单和最常用的用法。
1,在哪个界面 接受就要在哪个页面注册
2,接受数据。
3,发送数据(如果这个页面只是负责发送数据,就没必要注册、)
4,定义实体类(用于发送和接受)
一,前提
compile 'org.greenrobot:eventbus:3.0.0'
场景: 页面A—>页面B—>页面C
1,A通过B跳到C。如果是A—>B 当B 改变数据。返回A也要更改数据。这个时候,我们通常使用回调。
2, 那么。当A—>B—>C
问题:当C改变时,返回后要求改变A的数据。 这时候通过回调是不能实现的。B在中间呢。(。。。)至少我无法实现、、、、
步骤:
1,C页面:发送数据给A。 这个时候不要考虑B了。
//发送事件给A
String msg="C页面的数据";
EventBus.getDefault().post(new EventBusInfo(a));
2,A页面接受
//初始化。。。
EventBus.getDefault().register(this);//在当前界面注册一个订阅者
//把这个方法复制过去。直接敲不出来
@Subscribe
public void onEventMainThread(EventBusInfo event){
//收到事件后。要做的逻辑操作。
event.getMsg();//这个就是 "C页面的数据"
}
3,忘记了一个步骤:他们之前传输数据的桥梁 也就是 实体类或者 是事件。
public class EventBusInfo {
private String msg;
public EventBusInfo(String msg) {//事件传递参数
this.msg = msg;
}
public String getMsg() {//取出事件参数
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
这里需要注意的是:每两个页面只能有一个实体类
比如:A–B 是UserInfo 实体类作为桥梁
那么:A–C就不能用这个实体类了。要新建一个。
最后记得取消注册
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}