Android Kotlin基礎講座 05.2: LiveDataとLiveData observers
目次
タスク:ScoreViewModelにLiveDataを追加する
このタスクではScoreViewModel内のscore変数をLiveDataオブジェクトに変更し、それにオブザーバーを取り付けます。このタスクはGameViewModelにLiveDataを追加するためにやったことと似ています。
アプリ内のすべてのデータをLiveDataにし、完璧なアプリにするためにScoreViewModelにも変更を施します。
- ScoreViewModelのscore変数の型をMutableLiveDataにし、名前を_scoreに変更し、バッキングプロパティを追加してください。
private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
get() = _score
- ScoreViewModelのinitブロックの中で_scoreを初期化してください。initブロック内のログは消しても構いません。
init {
_score.value = finalScore
}
- 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をインポートしてください。
- アプリを起動しゲームをプレイしてください。以前と同じように動作しますが、現在はLiveDataが使われており、オブザーバーによって得点が更新されています。