同じような名前の2つのクラス、ViewModelProvidersとViewModelProviderを見ました。これらのクラスの違いは誰にも説明できますか?どのクラスが実際にViewModelを提供しますか?
ViewModelProviderSクラスは、ViewModelProviderクラスのインスタンスを提供します。ViewModelProviders.of( "this")を呼び出すと、アクティビティに関連付けられたViewModelProviderが作成されて返されます。
一方、ViewModelProviderは、アクティビティのViewModelのインスタンスを提供します。 ViewModelProviders.get(ExampleViewModel :: class.Java)を呼び出すと、ExampleViewModelクラスのインスタンスが返されます
これらの関数は通常、次のように一緒に機能します。
ViewModelProviders.of("this").get(ExampleViewModel::class.Java)
@ 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
}
これは機能しますか?