前回はViewModel内に変数を宣言してデータを変更後に画面回転するとデータが無くなってしまいました。「LiveData使っていないからでしょー。ViewModelとLiveDataはセットで使うのが鉄則でしょー」というツッコミが入るのでLiveDataを使ってみました。

$ git clone git@github.com:saitoyusuke/using_viewmodel_incorrectly.git
$ cd using_viewmodel_incorrectly
$ git checkout c60bf3ed4e45fb0c70afa6dd78daedd834fadef8
class MainViewModel : ViewModel() {
    val count: MutableLiveData<Int> = MutableLiveData(0)
}
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.count.value = viewModel.count.value?.plus(1)
            viewBinding.countView.text = viewModel.count.value.toString()
        }
    }
}

実際に動かしてみました

おかしいですね。LiveDataを使っても画面回転するとデータが無くなってしまいます。そもそもLiveDataの使い方が間違っているのでちゃんとドキュメント読んでMutableLiveDataとLiveDataを使いましょう。

参照:https://developer.android.com/topic/libraries/architecture/livedata?hl=ja