android - 如何使用 Fragment 中的 ViewModelProvider 将 ViewModel 附加到活动?
问题描述
众所周知ViewModelProviders
,已弃用我正在尝试删除已弃用的代码移动到ViewModelProvider
.
所以基本上我有一个 ViewModel(无参数)附加到活动,并且所有片段都访问应用程序状态的同一个实例。
我想在我的活动/片段中知道如何获取附加到活动的 ViewModel 实例。
活动:
val weatherViewModelFactory = WeatherViewModelFactory()
val viewModel = ViewModelProvider(viewModelStore, weatherViewModelFactory).get(WeatherViewModel::class.java)
分段:
val weatherViewModelFactory = WeatherViewModelFactory()
val viewModel = ViewModelProvider(activity!!.viewModelStore, weatherViewModelFactory).get(WeatherViewModel::class.java)
天气视图模型工厂:
//use less in my case
class WeatherViewModelFactory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return modelClass.getConstructor().newInstance()
}
}
摇篮依赖:
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
您必须注意到的主要问题是我WeatherViewModelFactory
每次都被迫创建,即使我必须获取片段的实例。
我注意到的是,androidx.lifecycle:lifecycle-extensions:2.2.0-rc02
他们引入了一个构造函数。
public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
哪个可以解决我的问题,但我不想转到那个版本。我一定是遗漏了一些东西2.1.0
解决方案
推荐阅读
- android - java.lang.NullPointerException:尝试从空对象引用上的字段 RecyclerView$ViewHolder.itemView' 读取
- ssl - 创建自签名 SSL 证书
- typescript - 如何在 Typescript 中编写 Polymer3 Mixin
- django - django 查询中的惰性求值如何工作?
- php - MySQL - 根据用户的选择选择列“名称”其中列“id”和“父”中的行彼此相等
- sql - 为什么while循环没有循环通过集合?
- sql - 用户和角色
- python - tensorflow中哪个API可以实现张量扩展?
- php - 如何为提交增加会话变量
- python - 调用对象时如何修复“RecursionError:超出最大递归深度”?