Android Kotlin Fundamentals 05.2 #6 :Task: Add LiveData to the ScoreViewModel

이번 태스크에서는 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의 업데이트를 감지합니다.

댓글



Designed by JB FACTORY