이번 태스크에서는 ScoreViewModel에 있는 score 데이터를 LiveData로 변경 해 보겠습니다. 그리고 여기에 observer를 붙혀 보겠습니다. 이 태스크는 GameViewModel에서 LiveData를 적용한 것과 매우 비슷 합니다.
ScoreViewModel이 완벽하게 수정되면, 이제 이 앱의 모든 데이터들이 LiveData를 사용해서 구현되게 될 것 입니다.
1. ScoreViewModel에서 score 변수를 MutableLiveData로 변경 해 주세요. score 데이터의 이름을 _score로 변경 해 주세요. 그리고 backing property를 추가 해 줍니다.
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
get() = _score
2. ScoreViewModel에서 init 블록 안에 _score를 초기화 해주세요. init 안에 있는 로그들은 지워도 되고, 안 지워도 무방합니다.
init {
_score.value = finalScore
}
3. ScoreFragment의 onCreaveView()안에서 ViewModel이 초기화 되고 난 후에 score LiveData에 observer를 붙힙니다. 해당 람다 함수 안에 score text view에 score값을 셋팅 합니다.
ViewModel의 score값을 텍스트 뷰에 직접적으로 할당하는 코드를 제거해 주세요.
observer가 데이터의 변경을 감지하여 텍스트뷰에 데이터를 셋 :
// Add observer for score
viewModel.score.observe(this, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})
viewModel의 데이터에 접근하여 데이터를 셋 - 변경을 감지하지 못함:
아래의 코드는 이제 지워 주세요.
binding.scoreText.text = viewModel.score.toString()
4. 앱을 한번 실행 해 보세요. 해당 앱은 이전과 똑같이 동작하지만, 지금의 앱은 LiveData를 이용 합니다. 그리고 observer가 score의 업데이트를 감지합니다.