web-dev-qa-db-ja.com

ViewModelProviders.of()は非推奨なので、ViewModelのオブジェクトをどのように作成する必要がありますか?

アクティビティでViewModelのオブジェクトを作成しようとしていますが、ViewModelProvidersは非推奨です。ViewModelのオブジェクトを作成する代替方法は何ですか。

29
Anchal Arora

このクラスは非推奨です。 ViewModelProviderのコンストラクタを直接使用します。 ここ

だから、これを使う代わりに

ViewModelProviders.of(this).get(MyViewModel.class); - deprecated

これを使用

new ViewModelProvider(this).get(MyViewModel.class); - correct
0
Attaullah

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を使用

0
Ravi