선생님, 개발을 잘하고 싶어요.

안드로이드 라이브 데이터 조합해서 사용하기, android livedata 조합하기, combine live data 본문

개발/android 개발

안드로이드 라이브 데이터 조합해서 사용하기, android livedata 조합하기, combine live data

알고싶은 승민 2021. 1. 31. 16:35

대상

2개 이상의 라이브 데이터를 조합해서 사용하고 싶은 사람.

MediatorLiveData가 별로라고 생각하는 사람.

 

문제

2개 이상의 라이브 데이터를 조합하여 새로운 라이브 데이터를 만들고 싶다고 해보죠.

 

예를 들면, 로그인 화면에서 이메일과 비밀번호가 작성되었을 때만 로그인의 enable 설정이 되었으면

이 화면에서 2개의 live data를 쉽게 설계할 수 있겠죠.

val email: MutableLiveData<String> = MutableLiveData()
val password: MutableLiveData<String> = MutableLiveData()

 

해결

 

해결할 때 Flow를 사용해 봅시다.

 

val enableLogin = combine(email.asFlow(), password.asFlow()) { email, password ->
    email.isNotBlank() && password.isNotBlank()
}.onStart { emit(false) }.asLiveData()

email.asFlow(): email 라이브 데이터를 Flow로 변경합니다.

combine(a: Flow, b: Flow): a Flow와 b Flow둘 중 어느 것이 emit 될 때, 최신의 a,b 페어를 emit합니다.

flow.asLiveData(): combine으로 생성한 Flow를 다시 LiveData로 변경합니다.

 

 

Comments