使用环境:
【android之 eventBus简单实用】两个界面需要传递参数,不论这两个界面在哪,只要在一个app里。
几遍一个是fragment,一个是activity,两个没有依赖关系。
或者一个是a activity的fragment,一个是b activity的fragment,也可以传递数据。
使用方法:
1 build.gradle的引用:
compile 'org.greenrobot:eventbus:3.0.0'//eventBus引用
2 根据需要传递的参数,创建一个类:
类名随便起,格式统一就行。
个人感觉,就是一个bean类,但是加上来 event好区分。
public class AddressBeanEvent {/**
* addr : 河南省南阳市南阳站河南省南阳市南阳站长江东路春华苑1号楼
* addr_id : 2
* consignee : 徐炜彤
* isOften : 1
* lat : 33.017851
* lng : 112.545967
* map_addr : 南阳市
* mobile : 18603000000
*/
private String addr;
private String addr_id;
private String consignee;
private String isOften;
private String lat;
private String lng;
private String map_addr;
private String mobile;
public AddressBeanEvent(String addr,String addr_id,String consignee,String isOften,String lat,String lng,String map_addr,String mobile){
this.addr = addr;
this.addr_id = addr_id;
this.consignee = consignee ;
this.isOften = isOften;
this.lat = lat;
this.lng = lng;
this.map_addr = map_addr;
this.mobile = mobile;
}public String getAddr() {
return addr;
}public void setAddr(String addr) {
this.addr = addr;
}public String getAddr_id() {
return addr_id;
}public void setAddr_id(String addr_id) {
this.addr_id = addr_id;
}public String getConsignee() {
return consignee;
}public void setConsignee(String consignee) {
this.consignee = consignee;
}public String getIsOften() {
return isOften;
}public void setIsOften(String isOften) {
this.isOften = isOften;
}public String getLat() {
return lat;
}public void setLat(String lat) {
this.lat = lat;
}public String getLng() {
return lng;
}public void setLng(String lng) {
this.lng = lng;
}public String getMap_addr() {
return map_addr;
}public void setMap_addr(String map_addr) {
this.map_addr = map_addr;
}public String getMobile() {
return mobile;
}public void setMobile(String mobile) {
this.mobile = mobile;
}
}
3 传递参数:
传参使用的是上面的构造方法,所以构造方法一定要有。
个人的做法就是得到需要传递的参数,然后调用eventbus的方法,就可以了。
String addr = loc[1];
String name = holder.ofter_name.getText().toString();
String lat = holder.ofter_lat.getText().toString();
String lng =holder.ofter_lng.getText().toString();
String map_addr = loc[0];
String mobile = holder.ofter_phone.getText().toString();
EventBus.getDefault().post(new AddressBeanEvent(addr,null,name,null,lat,lng,map_addr,mobile));
//!!
4 接收参数的时候,需要注册;在界面消失的时候需要取消注册!
在接受界面注册的方法:
EventBus.getDefault().register(this);
为了防止报错首先判断下:
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
接收的方法:
@Subscribe//订阅事件FirstEvent
public void onEventMainThread(AddressBeanEvent event) {
/**
* addr : 河南省南阳市南阳站河南省南阳市南阳站长江东路春华苑1号楼
* addr_id : 2
* consignee : 徐炜彤
* isOften : 1
* lat : 33.017851
* lng : 112.545967
* map_addr : 南阳市
* mobile : 18603000000
*/
String mobile = event.getMobile();
String map_addr = event.getMap_addr();
String addr = event.getAddr();
write_eidt_phone.setText(mobile);
write_eidt_loc.setText(map_addr);
write_eidt_loc_detial.setText(addr);
}
//取消注册的方法
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
是比广播简单,使用。