android의 이벤트 Bus 간단하고 실용적

3969 단어 일기.
사용 환경:
두 인터페이스는 매개 변수를 전달해야 한다. 이 두 인터페이스가 어디에 있든 한 앱에만 있다. 
몇 번 중 하나는fragment이고, 하나는activity이며, 두 가지는 의존 관계가 없다.
또는 하나는 a activity의fragment이고, 하나는 b activity의fragment이며, 데이터도 전달할 수 있다.
사용 방법:
  1 build.gradle의 참조:
compile 'org.greenrobot:eventbus:3.0.0'//eventBus  

 
2 전달할 매개 변수에 따라 클래스를 생성합니다.
유명은 마음대로 짓고 격식은 통일하면 된다.
개인적인 느낌은 하나의 bean류이지만 이벤트를 추가하면 구분이 잘 됩니다.
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 전송 매개변수:
전참은 위의 구조 방법을 사용하기 때문에 구조 방법은 반드시 있어야 한다.
개인적인 방법은 전달해야 할 매개 변수를 얻어서 이벤트bus를 호출하면 된다.
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);
}

 
방송보다 간단하고 사용이 간편합니다.

좋은 웹페이지 즐겨찾기