web-dev-qa-db-ja.com

ViewModelProvidersクラスとViewModelProviderクラスの違いは何ですか?

同じような名前の2つのクラス、ViewModelProvidersとViewModelProviderを見ました。これらのクラスの違いは誰にも説明できますか?どのクラスが実際にViewModelを提供しますか?

13
Abhishek Kumar

ViewModelProviderSクラスは、ViewModelProviderクラスのインスタンスを提供します。ViewModelProviders.of( "this")を呼び出すと、アクティビティに関連付けられたViewModelProviderが作成されて返されます。

一方、ViewModelProviderは、アクティビティのViewModelのインスタンスを提供します。 ViewModelProviders.get(ExampleViewModel :: class.Java)を呼び出すと、ExampleViewModelクラスのインスタンスが返されます

これらの関数は通常、次のように一緒に機能します。

ViewModelProviders.of("this").get(ExampleViewModel::class.Java)
0
ArdritK

@ andritK、ViewModelProvidersは現在廃止されているようです。ドキュメントでは、この場合はすぐにViewModelProvidersをすぐに使用できると述べています。次に、以下のコードを次のように変更します:[〜#〜] from [〜#〜]

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
}

[〜#〜] to [〜#〜]

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
}

これは機能しますか?

0
binrebin