J'ai vu deux classes avec un nom similaire, ViewModelProviders et ViewModelProvider. Quelqu'un peut-il expliquer quelle est la différence entre ces classes? quelle classe fournit réellement le ViewModel?
La classe ViewModelProviderS fournit des instances de la classe ViewModelProvider.Votre appel à ViewModelProviders.of ("ceci") crée et renvoie un ViewModelProvider associé à l'activité.
ViewModelProvider, d'autre part, fournit des instances de ViewModel de l'activité. L'appel de ViewModelProviders.get (ExampleViewModel :: class.Java) renvoie une instance de la classe ExampleViewModel
Ces fonctions vont généralement de pair comme:
ViewModelProviders.of("this").get(ExampleViewModel::class.Java)
@andritK, il semble que ViewModelProviders est désormais obsolète. La documentation indique que nous pouvons immédiatement utiliser ViewModelProviders dans ce cas maintenant. alors que diriez-vous de changer les codes ci-dessous comme suit: DE
inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
val vm = ViewModelProviders.of(this, factory)[T::class.Java]
vm.body()
return vm
}
À
inline fun <reified T : ViewModel> Fragment.viewModel(factory: ViewModelProvider.Factory, body: T.() -> Unit): T {
val vm = ViewModelProvider(this, factory).get(T::class.Java)
vm.body()
return vm
}
Est-ce que ça marche?