본문 바로가기

그 외 코드/오류 해결

[안드로이드] MediatorLiveData 가 addSource를 추가했음에도 작동하지 않는 문제

728x90
반응형

 

 

 

var onReadyDevice: MediatorLiveData<Int> = MediatorLiveData()

fun _onReadyDevice(): Int{
    return if(emg1Connected.value == true && emg2Connected.value == true) EMG_DEVICE_1_2
    else if (emg1Connected.value == true) EMG_DEVICE_1
    else if (emg2Connected.value == true) EMG_DEVICE_2
    else -1
}

init{
    onReadyDevice.addSource(emg1Connected) {
        onReadyDevice.value = _onReadyDevice()
    }
    onReadyDevice.addSource(emg2Connected) {
        onReadyDevice.value = _onReadyDevice()
    }
}

 

MediatorLiveData를 위와 같이 만들어주었음에도 불구하고, LiveData변화에 따라 MediaotrLiveData의 value가 변하지 않고, null만 반환하여 addSource가 작동하지 않았습니다.

그 이유를 알아보니,

MediatorLiveData의 addSource 메서드 콜백이 트리거 되려면, MediaotrLiveData 자기자신또한 observing 되어야 한다는 것입니다.

그래서, Activity나 Fragment에서 observer를 추가해주어야 했습니다.

요로코롬 Activity에서 빈 observer를 추가해주었더니. 작동하였습니다.

viewModel.onReadyDevice.observe(this@AngleActivity,{
    // do nothing
})

 굿 ^^!

 

 

 

728x90
반응형