查看 ViewModel
的 Google 文档,他们展示了以下关于如何获取 ViewModel
的示例代码:
val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
当使用最新的依赖 android.arch.lifecycle:extensions:1.1.1
没有这样的类 ViewModelProviders
。
转到 ViewModelProviders
的 文档,我看到一条评论说:
此类在 API 级别 1.1.0 中已弃用。使用 ViewModelProvider.AndroidViewModelFactory
问题是,当尝试使用 ViewModelProvider.AndroidViewModelFactory
时,找不到等效的 of
方法来获取 ViewModel
的实例。
我尝试做的事情:
ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)
因此方法的名称 create
,我每次调用它时都会得到一个 ViewModel 的新实例,这不是我所追求的。
有什么想法可以替换上面不推荐使用的代码吗?
原文由 TareK Khoury 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新 2020-06-16 : 目前
ViewModelProviders
已弃用,不应再使用。这个问题和答案来自 2018 年底,当时情况并非如此。这个问题和答案也适用于ViewModelProviders
的旧架构组件版本,而不是 AndroidX 版本。就在这里。为了证明这一点:
在 Android Studio 3.2.1 中新建项目(使用 Kotlin,
minSdkVersion
21,“空活动”模板)将
android.arch.lifecycle:extensions:1.1.1
添加到app
模块的依赖项中这会给你一个
app/build.gradle
像:然后,您将看到该库与该类一起显示在“外部库”中:
您将能够引用该类:
该注释位于
ViewModelProviders.DefaultFactory
类条目的下方,并且指的是该类,而不是ViewModelProviders
:使用
ViewModelProviders
。