EventBus出现的原因在于解决UI的同步更新的问题,比如我的某个Activity界面需要显示上传的图片(比如头像),但是修改上传的头像时,进入上传头像页面,修改后,退出到显示页面,显示页面要及时更新,这就用到了同步的情况,这个时候就需要EventBus来操作;
代码及步骤如下:
1,在app.gradle的dependencies { }中加入implementation 'org.greenrobot:eventbus:3.0.0';
implementation 'org.greenrobot:eventbus:3.0.0'
2,创建bean类如下:
public class TextEvent {
public String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public TextEvent(String msg) {
this.msg = msg;
}
}
可以不用set,get方法;
3,在使用EventBus的activity类的OnCreate方法中加入:EventBus.getDefault().register(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_event_bus3_msg);
EventBus.getDefault().register(this);
}
4,通过点击事件注册EventBus的post事件
public void getEventBusData(View view) {
TextEvent event = new TextEvent("测试来自EventBus的数据");
event.setMsg("EventBus");
EventBus.getDefault().post(event);
}
5,更新UI的代码如下:需要加入注解:@Subscribe(threadMode = ThreadMode.MAIN)(方法名可以随便命名)
@Subscribe(threadMode = ThreadMode.MAIN)
public void xx(TextEvent event) {//EventBus3.0.0可以随便取方法名,2.x版本需要onEvent//onDataSynEvent
Toast.makeText(this, event.msg+"&&"+event.getMsg(), Toast.LENGTH_SHORT).show();
// initUserInfo();更新UI的方法
// 还可以进行网络请求比如更新UI的网络请求方法
// UpdateUserInfo(final Context context)
}
6,在销毁的方法里面加入EventBus.getDefault().unregister(this);
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
网友评论