アクティビティでViewModelのオブジェクトを作成しようとしていますが、ViewModelProvidersは非推奨です。ViewModelのオブジェクトを作成する代替方法は何ですか。
このクラスは非推奨です。 ViewModelProviderのコンストラクタを直接使用します。 ここ
だから、これを使う代わりに
ViewModelProviders.of(this).get(MyViewModel.class); - deprecated
これを使用
new ViewModelProvider(this).get(MyViewModel.class); - correct
ViewModel KTXライブラリは、ViewModelからコルーチンを簡単に起動できるようにするviewModelScope()関数を提供します。 CoroutineScopeはDispatchers.Mainにバインドされ、ViewModelがクリアされると自動的にキャンセルされます。 ViewModelごとに新しいスコープを作成する代わりに、viewModelScope()を使用できます。
このモジュールを含めるには、アプリのbuild.gradleファイルに次を追加します。
dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
}
例として、次のviewModelScope()関数は、バックグラウンドスレッドでネットワーク要求を行うコルーチンを起動します。ライブラリは、すべてのセットアップと対応するスコープのクリアを処理します。
class MainViewModel : ViewModel() {
// Make a network request without blocking the UI thread
private fun makeNetworkRequest() {
// launch a coroutine in viewModelScope
viewModelScope.launch {
remoteApi.slowFetch()
...
}
}
// No need to override onCleared()
}
リンク: ビューモデルにKtxを使用