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);
}

 

是比广播简单,使用。

你可能感兴趣的:(日记)