gpt4 book ai didi

android - ViewModelProviders 已过时,应该更换什么?

转载 作者:行者123 更新时间:2023-11-29 16:28:10 27 4
gpt4 key购买 nike

我使用 ViewModelProviders。但是今天,更新库后,有30条消息。据我所知,ViewModelProviders 不再可用,您需要替换它,我查看了 developer.google,但不明白要替换什么?我的代码:

inline fun <reified T : ViewModel> FragmentActivity.injectViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProviders.of(this, factory)[T::class.java]
}

inline fun <reified T : ViewModel> Fragment.injectViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProviders.of(this, factory)[T::class.java]
}

你能解释一下为什么它已经过时了吗?

最佳答案

根据 the documentation :

Use the by viewModels() Kotlin property delegate or ViewModelProvider.ViewModelProvider(ViewModelStoreOwner, Factory), passing in the fragment and factory.

因此您可以将扩展替换为:

inline fun <reified T : ViewModel> FragmentActivity.injectViewModel(factory:  ViewModelProvider.Factory): T {
return ViewModelProvider(this, factory)[T::class.java]
}

inline fun <reified T : ViewModel> Fragment.injectViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProvider(this, factory)[T::class.java]
}

并且,根据错误消息,您可以改为使用 fragment-ktxactivity-ktx 依赖项中的 Kotlin 属性扩展,并完全删除您的扩展方法。

by viewModelsby activityViewModels对于 fragment :

// Retrieve the ViewModel associated with this Fragment
val viewModel: MyVewModel by viewModels { myFactory }

// Retrieve the ViewModel associated with the activity
val activityViewModel: MyVewModel by activityViewModels { myFactory }

或者,如果您从 Activity 本身访问 ViewModel,您将使用它的 by viewModels :

// In an Activity, you can retrieve a ViewModel scoped to the Activity
// by using viewModels
val viewModel: MyVewModel by viewModels { myFactory }

关于android - ViewModelProviders 已过时,应该更换什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58782309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com