しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

ViewModelProviderでViewModelを呼び出す

ViewModelですがbyを使わずにViewModelProviderで呼び出せるようなので試してみました。

まずはViewModelを使うためのライブラリをインストールします。

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
implementation 'androidx.activity:activity-ktx:1.6.1'
implementation 'androidx.fragment:fragment-ktx:1.5.5'

ViewModelは下のように定義します。

class MyViewModel: ViewModel() {
    var value = 0
}

Activity内でのViewModelの取得方法は下の通りです。
byを使って呼び出す事でActivityが同じものであればViewModelの同じインスタンスが返ってきます。

val viewModel: MyViewModel by viewModels()

ViewModelProviderを使う場合、下のように記述します。
条件によってclass名が変わる場合などはこちらの方が使いやすそうです。

val viewModel = ViewModelProvider(this)[MyViewModel::class.java]