web-dev-qa-db-fra.com

Comme ViewModelProviders.of () est obsolète, comment dois-je créer un objet de ViewModel?

J'ai essayé de créer un objet de ViewModel dans une activité mais ViewModelProviders est déconseillé. Quelle est donc l'alternative pour créer l'objet ViewModel?.

29
Anchal Arora

Cette classe est obsolète. Utilisez directement les constructeurs de ViewModelProvider. ici

Donc, au lieu d'utiliser cela

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

Utilisez celui-ci

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

La bibliothèque ViewModel KTX fournit une fonction viewModelScope () qui facilite le lancement des coroutines à partir de votre ViewModel. Le CoroutineScope est lié à Dispatchers.Main et est automatiquement annulé lorsque le ViewModel est effacé. Vous pouvez utiliser viewModelScope () au lieu de créer une nouvelle étendue pour chaque ViewModel.

Pour inclure ce module, ajoutez ce qui suit au fichier build.gradle de votre application:

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
}

Par exemple, la fonction viewModelScope () suivante lance une coroutine qui effectue une requête réseau dans un thread d'arrière-plan. La bibliothèque gère toute la configuration et l'effacement de portée correspondant:

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()
}

Liens: tilisation Ktx pour le modèle de vue

0
Ravi