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

対象:ViewModelを誤解して使っている方(画面回転の対応ができない方)

「ViewModelは画面回転してもデータを保存してくれるところでしょー!ViewModel()を継承して使えばいいんでしょー」という方がいるのでサンプルを作ってみました。

$ git clone git@github.com:saitoyusuke/using_viewmodel_incorrectly.git
$ cd using_viewmodel_incorrectly
$ git checkout 6222eced99c8427c9fccd80cd62beb9b09c7fccf
class MainViewModel : ViewModel() {
    var count: Int = 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 = viewModel.count + 1
            viewBinding.countView.text = viewModel.count.toString()
        }
    }

ViewModelって簡単ですねー。実際に動かしてみましょう。

おかしいですね。画面回転するとカウントアップしたデータが無くなってしまいます。ViewModelはただデータを保存する場所ではないので、このような使い方はしないようにしましょう。