- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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-ktx
和 activity-ktx
依赖项中的 Kotlin 属性扩展,并完全删除您的扩展方法。
即 by viewModels
和 by 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/
我看到两个名称相似的类,ViewModelProviders 和 ViewModelProvider。任何人都可以解释这些类(class)之间的区别是什么?哪个类实际提供了 ViewModel? 最佳
我正在尝试创建可感知生命周期的 View 模型。但是我在我的 Android 项目中找不到 ViewModelProviders 类,只有 ViewModelProvider。似乎也没有 androi
我目前正在将我的项目架构从 MVP 转换为 MVVM。当我在研究它时,我发现有些事情让我感到困惑: 在项目iosched的ScheduleViewModelFactory.kt中,工厂实现ViewMo
由于所说的贬值,我不再使用 ViewModelProviders.of(this)。我研究了其他问题并使用了答复中的代码。所有代码都没有错误,但当我尝试运行该应用程序时,出现异常。 此处发生错误。 P
我有一个在我的“MainActivity.java”上启动的模型,其名称如下: //MainActivity.java (public class MainActivity extends AppCo
我正在研究 Android ViewModel 架构组件,但在尝试在 AppCompatActivity 中初始化 ViewModel 时出现上述错误。 import android.arch.lif
“ViewModelProviders”已从 androidx.lifecycle:lifecycle-*:2.2.0-alpha03 中弃用 https://developer.android.co
我想重新使用 ViewModel 和 LiveData 从 Firebase 读取节点。这是我在 Fragment 中的代码 FirebaseDatabaseViewModel tes
我正在尝试使用 View 模型,但是遇到了一个奇怪的错误,编译器说它无法识别“of”。我已经在我的 build.gradle 中导入了依赖项并像这样同步 def ver = "1.1.1" impl
我使用 ViewModelProviders。但是今天,更新库后,有30条消息。据我所知,ViewModelProviders 不再可用,您需要替换它,我查看了 developer.google,但不
我正在尝试遍历 google tutorial on building good ap architecture .我正在使用 Java 8 和 SDK 26。这是我到目前为止的代码: package
我试图通过将我的一些 ViewModel 实例移动到一个抽象基类中来减少 Dagger 的一些样板,但找不到一个很好的方法来做到这一点。我的 Intent 是从我的基本 fragment 中实例化我的
ActivityViewModels 和惰性 ViewModelProvider 的区别? 我见过两种初始化 View 模型的方法: private val someViewModel: SomeVi
为什么我应该为 View 模型使用 viewmodelproviders? 为什么我不能将自定义单例注释添加到我的 View 模型中,然后将此 View 模型注入(inject) fragment 类
这就是我正在努力做的事情。 在 Fragment 内设置对象的 ArrayList 从 FragmentActivity 中的观察者获取该数组容器(承载所有 fragment 的 Activity)
我相信我正在遵循为我提供的用于建立 ViewModelProvider.Factory 的代码示例。它发生在 OnAttach 方法的 CheckInRecentList 代码中的这条语句上。我们将不
关于过去的问题How to get a ViewModel? ,以及我发现的例子,它并不能解决我的问题。我没有在那里发表评论的权限,所以我不得不再次询问。我没有 ViewModelProviders
我是 Kotlin 的新手,请帮助我如何在 Kotlin 中使用 ViewModelProviders.of(this) 我的java代码是 mFavViewModel = ViewModelPro
嘿,我正在尝试让我的 ViewModel 工作,但到目前为止还没有运气。Android Studio 显示错误 Cannot resolve symbol 'ViewModelProviders'。
我很高兴使用新的 Android 架构组件 ViewModel 系统,它很好地将 Activity/Fragment/Layout 渲染问题与 ViewModel 逻辑分开。我已经成功地对 ViewM
我是一名优秀的程序员,十分优秀!