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()
}
'개발 공부 > Android' 카테고리의 다른 글
[Android Kotlin] RecyclerView 데이터 변경 시 스크롤 위치 유지하기(onSaveInstanceState(),onRestoreInstanceState() ) (0) | 2022.10.01 |
---|---|
[Android Kotlin]ViewBinding과 DataBinding 차이 & Databinding 적용하기 (0) | 2022.09.26 |
[Android/이슈 해결] 앱 출시 이후 Retrofit 작동을 하지 않음 (0) | 2022.09.24 |
[Android Kotlin] WebView 구현하기 (0) | 2022.09.08 |
[Android Kotlin] Clipboard 복사 기능 구현하기(copy) (0) | 2022.09.02 |