在项目中遇到了界面关闭的时候需要通知activity或者fragment之间数据的刷新,了解了EventBus的使用,特别总结下来,方便使用。
主要功能:替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
一丶下载地址:点击打开链接下载资源
二丶使用方法
可以导入 jar包或者引用整个工程
1.在发送消息的界面 我这里是点击 返回键 发送一个消息
case R.id.btn_back: //返回键
EventBus.getDefault().post(new Event(Event.FROM_PERSONINFORMATION_ACTIVITY, user));
finish();
break;
2. 在接受消息界面,注册eventBus
//注册eventBus
EventBus.getDefault().register(this);
3.在接受消息界面,重写onEventMainThread()方法,把需要刷新的数据操作都放在里面
<span style="white-space:pre"></span>public void onEventMainThread(Event event){
String msg = event.getMsg();
int code = event.getCode();
//如果来自个人资料界面
if(Event.FROM_PERSONINFORMATION_ACTIVITY.equals(msg) ){
mUser = (User) event.getData();
mTv_username.setText(mUser.NickName);
mTv_motto.setText(mUser.SignName);
if(code == 1){
mTv_username.setText("代用名");
mTv_motto.setText("卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭。");
//用户置为空
mUser = null;
}
}
if(Event.FROM_HOMEPAGE_FRAGMENT.equals(msg)){
mTv_username.setText(mUser.NickName);
mTv_motto.setText(mUser.SignName);
}
}
Event类
<span style="white-space:pre"></span>public class Event implements Serializable{
public static final String FROM_MODIFYNICK_ACTIVITY = "isFromModifyNick";//来自修改昵称和签名
public static final String FROM_MYAPPOINTMENT_ACTIVITY = "isFromMyAppointment";//来自我的预约
public static final String FROM_PERSONINFORMATION_ACTIVITY = "isFromPersoninformation";//来自我的个人信息
public static final String FROM_HOMEPAGE_FRAGMENT = "isFromhomepagefragment";//来自我的首页fragment
String msg;
int code=0;
Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public Event(String msg) {
this(msg,0);
}
public Event(String msg, int code) {
this.msg = msg;
this.code = code;
}
public Event(String msg, Object data,int code) {
this.msg = msg;
this.data = data;
this.code = code;
}
public Event(String msg, Object data) {
this(msg,0);
this.data=data;
}
public String getMsg() {
return msg;
}
public int getCode() {
return code;
}
}
4.在销毁界面时注销
<span style="white-space:pre"></span>//销毁调用
@Override
public void onDestroy() {
super.onDestroy();
if (rechangeReceiver != null) {
//注销广播
mApplication.unregisterReceiver(rechangeReceiver);
}
//注销EventBus
EventBus.getDefault().unregister(this);
}