如何在Android SunFlower项目的活动中获取ViewModel?

如何在Android SunFlower项目的活动中获取ViewModel?,android,android-activity,kotlin,mvvm,viewmodel,Android,Android Activity,Kotlin,Mvvm,Viewmodel,我正在学习谷歌项目的MVVM 对于Fragment,它将获得viewmodel,如下所示 private val plantDetailViewModel: PlantDetailViewModel by viewModels { InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId) } 我想尝试同样的方法在活动中获取viewmodel。但是require()显

我正在学习谷歌项目的
MVVM

对于
Fragment
,它将获得
viewmodel
,如下所示

private val plantDetailViewModel: PlantDetailViewModel by viewModels {
        InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId)
    }
我想尝试同样的方法在活动中获取
viewmodel
。但是
require()
显示未解析的引用

当我将
数据绑定替换为
时,
数据绑定不起作用

它是否有其他模式可用于
providePlantDetailViewModelFactory()


提前谢谢。

我不认为你可以为你的
活动
做与
片段
类似的事情

为什么?

委托函数
viewModels
可从fragment ktx库(请参阅)获得,作为使用by关键字在值对象上惰性地获取
ViewModel
实例的扩展

举个例子,没有这种东西可以用于活动


因此,最好是从Kotlin标准库中创建自己的或找到其他方法,如basic
lazy{}
函数,并为其提供逻辑。

您需要对
“androidx.activity:activity ktx:$version”
有一个渐变依赖关系


然后您可以
在活动中导入androidx.activity.viewModels

您必须将这些添加到build.gradle中

implementation "androidx.core:core-ktx:1.3.1"
implementation "androidx.fragment:fragment-ktx:1.2.5"
活动中的用法

val usersViewModel: UsersViewModel by viewModels()
片段中的用法

// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()

// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
//获取对此片段作用域的ViewModel的引用
val viewModel by viewModels()
//获取对其活动范围内的ViewModel的引用
val viewModel by activityViewModels()
无法导入activityViewModels