android之 eventBus简单实用

使用环境:
【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); }


是比广播简单,使用。

    推荐阅读