개발 공부/Android / / 2022. 9. 30. 23:14

[Android Kotlin] RxBus - RxJava 전역 Callback 구현하기

1. RxJava gracle(Module) 추가

 dependencies {
 
     implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
     implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
     
}

2. RxBus Object 생성

object RxBus {
    private val publisher = PublishSubject.create<Any>()

    fun publish(event: Any) {
        publisher.onNext(event)
    }

    fun <T> listen(eventType: Class<T>): Observable<T> = publisher.ofType(eventType)
}

3. 이벤트 관리 클래스 생성

자신이 필요에 맞게 콜백 클래스를 생성해준다 

예를 들어서 로그인을 했을 때, 로그인이 끝났을 때, 즐겨찾기 버튼을 눌렀을 때 등 이벤트가 일어났을 때 어떤 이름과 어떤 정보가 필요한지 생각하면 된다.


class RxEvents {
    //Main List에서 별을 눌렀을 때 호출 콜백
    class EventFavoriteOfMainList(val movie: MovieData)

    //즐겨찾기 List에서 별을 눌렀을 호출 콜백
    class EventFavoriteOfFavoriteList(val movie: Movie)
}

사용 방법

- 콜백 클래스를 호출할 곳에 RxBus.publish(자신이 만든 콜백 관리 클래스명.콜백클래스명()) 이 한 줄을 넣으면 된다.

//즐겨찾기 별 버튼
ivbFavorite.setOnClickListener{
    item.favorite = !item.favorite
    RxBus.publish(RxEvents.EventFavoriteOfMainList(item))
}

- 콜백을 받는 쪽에야Disposable 생성. 이를 통해서 RxJava의 observable를 관리

 private val compositeDisposable = CompositeDisposable()
 
 override fun onCreate(savedInstanceState: Bundle?) {
 compositeDisposable.add(
            RxBus.listen(RxEvents.EventFavoriteOfMainList::class.java).subscribe {
                if (it.movie.favorite) {//true
                    mainViewModel.addFavorite(it.movie)
                } else {//false
                    mainViewModel.deleteFavorite(it.movie)
                }
            }
        )
        
      ...
}


override fun onDestroy() {
    compositeDisposable.clear()
}
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유