Android Kotlin基礎講座 05.2: LiveDataとLiveData observers

タスク:ScoreViewModelにLiveDataを追加する

このタスクではScoreViewModel内のscore変数をLiveDataオブジェクトに変更し、それにオブザーバーを取り付けます。このタスクはGameViewModelにLiveDataを追加するためにやったことと似ています。

アプリ内のすべてのデータをLiveDataにし、完璧なアプリにするためにScoreViewModelにも変更を施します。

  1. ScoreViewModelのscore変数の型をMutableLiveDataにし、名前を_scoreに変更し、バッキングプロパティを追加してください。
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
   get() = _score
  1. ScoreViewModelのinitブロックの中で_scoreを初期化してください。initブロック内のログは消しても構いません。
init {
   _score.value = finalScore
}
  1. ScoreFragmentのonCreateView()中の、viewModelの初期化文のあとで、score LiveDataオブジェクト用のオブザーバーを取り付けてください。ラムダ式の中でscoreの値をテキストビューに設定します。ViewModelからテキストビューに直接scoreの値を代入しているコードは削除してください。

追加するコード:

// Add observer for score
viewModel.score.observe(viewLifecycleOwner, Observer { newScore ->
   binding.scoreText.text = newScore.toString()
})

削除するコード:

binding.scoreText.text = viewModel.score.toString()

Android Studioに促された場合は、androidx.lifecycle.Observerをインポートしてください。

  1. アプリを起動しゲームをプレイしてください。以前と同じように動作しますが、現在はLiveDataが使われており、オブザーバーによって得点が更新されています。