Otto나 GreenRobot같은 라이브러리를 이용할 수도 있지만,
Rx로도 충분히 구현이 가능하기 때문에(Otto는 Rx가 나오고 중단된 걸로 알고있음)
기존 자바 클래스
public class PerformanceEventBus {
public static final PerformanceEventBus instance = new PerformanceEventBus();
private BehaviorSubject<Long> performanceIdSubject = BehaviorSubject.create();
public PerformanceEventBus(){
}
public static PerformanceEventBus getInstance() {
return instance;
}
public void setPerformanceId(long performanceId){
performanceIdSubject.onNext(performanceId);
}
public Observable<Long> getPerformanceId(){
return performanceIdSubject;
}
}
코틀린 클래스
object TeamEventBus {
private var teamIdSubject: BehaviorSubject<Long> = BehaviorSubject.create()
fun setTeamId(teamId: Long){
teamIdSubject.onNext(teamId)
}
fun getTeamId(): Observable<Long>{
return teamIdSubject
}
}
싱글톤으로 사용할 경우 클래스가 아닌 object로 하고, 굳이 생성자는 필요x
teamId를 set할 때
TeamEventBus.INSTANCE.setTeamId(0L);
teamId를 get할 때(Rx)
TeamEventBus.INSTANCE.getTeamId()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(Schedulers.io())
.subscribe(teamId -> {
this.teamId = teamId;
BPTeam team = BPTeam.findTeamWhereTeamId(this.teamId);
/** Realm 팀 정보가 있는 경우 (업데이트) */
if (team != null) {
if (teamNameEditText != null)
teamNameEditText.setText(team.getName());
if (descriptionEditText != null)
descriptionEditText.setText(team.getDescription());
if (agreeCheckBox != null)
agreeCheckBox.setChecked(team.isUsesMr());
isUpdate = true;
}
}, e -> {
Logger.d(Error.getThrowable(e));
Logger.d(BPApplication.getCrashDeviceInfo());
});
아마 자바로 했으면 TeamEventBus.getInstance().getTeamId() 이런식으로 진행될 것
'Programming > Android' 카테고리의 다른 글
Kotlin 사용 (2) - Custom TextView (letter spacing) (0) | 2017.06.15 |
---|---|
Kotlin 사용시 주의사항? (0) | 2017.05.30 |
Kotlin 설치 (0) | 2017.05.20 |
Realm 과 Jack Option (0) | 2017.05.19 |
Glide Svg 이미지관련 (0) | 2017.05.19 |