728x90
반응형
이번에는 score를 ScoreViewModel의 LiveData 객체로 변경하고 옵저버를 붙일 것이다.
이번 작업은 4번의 LiveData를 GameViewModel에 추가한 작업과 비슷할 것이다.
앱의 모든 데이터가 LiveData를 사용하도록 하기 위해 ScoreViewModel에 이러한 변경점을 적용한다.
1. ScoreViewModel의 score 변수를 MutableLiveData로 변경한다.
_score 변수를 네이밍 컨벤션을 지켜 이름을 변경하고 backing property를 추가한다.
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
get() = _score
2. GameViewModel의 초기화 블럭 안에서 _score를 초기화한다. 그리고 로그를 삭제하고 싶다면 삭제해도 된다.
(Codelab에서 기본 제공하는 코드에 로그가 있다.)
init {
_score.value = finalScore
}
3. ScoreFragment의 onCreateView안에 viewModel 초기화 후, score LiveData 객체에 옵저버를 붙인다.
람다식안에서 score 값을 score text view에 설정한다.
viewModel의 score 값을 직접 할당하는 코드를 제거한다.
추가할 코드
// Add observer for score
viewModel.score.observe(viewLifecycleOwner, Observer { newScore ->
binding.scoreText.text = newScore.toString()
})
삭제할 코드
binding.scoreText.text = viewModel.score.toString()
4. 앱을 실행하고 게임을 플레이하면, 앱은 이전과 동일하게 동작하지만
지금은 점수를 업데이트하기 위해 LiveData와 옵저버를 사용하고 있다.
728x90
반응형
'Android' 카테고리의 다른 글
Codelab으로 LiveData 알아보기 - 8. 정리(完) (0) | 2023.05.03 |
---|---|
Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button (0) | 2023.05.01 |
Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2) (0) | 2023.04.27 |
Codelab으로 LiveData 알아보기 - 4. Add a game-finished event(1) (0) | 2023.04.25 |
종종 간과하는 문제 해결 에피소드(feat. Handler, Thread) (0) | 2023.04.24 |