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);
}
방송보다 간단하고 사용이 간편합니다.