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