web-dev-qa-db-fra.com

Quelle est la différence entre ViewModelProviders et ViewModelProvider class?

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?

13
Abhishek Kumar

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)
0
ArdritK

@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?

0
binrebin