さて、気を取り直してLiveDataとMutableLiveDataを使って値を購読するように実装しましょう。

$ git clone git@github.com:saitoyusuke/using_viewmodel_incorrectly.git
$ cd using_viewmodel_incorrectly
$ git checkout 6ecec129966387d5ef0e729f613682e84c80b949
class MainViewModel : ViewModel() {
    private val _count: MutableLiveData<Int> = MutableLiveData(0)
    val count: LiveData<Int> = _count

    fun countUp() {
        _count.postValue(_count.value?.plus(1))
    }
}
class MainActivity : AppCompatActivity() {

    private lateinit var viewBinding: ActivityMainBinding
    private val viewModel = MainViewModel()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        viewBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(viewBinding.root)

        viewBinding.countUp.setOnClickListener {
            viewModel.countUp()
        }

        viewModel.count.observe(this) { count ->
            viewBinding.countView.text = count.toString()
        }
    }
}

実際に動かしてみました。

ViewModelもLiveDataもちゃんと使っているのに画面回転するとデータが無くなってしまいます。正しく使えているはずなのになぜでしょう。

次回は画面回転してもデータが保存されるようにします。