如何从Activity中获取hiltViewModel?

bob*_* ze 3 android android-viewmodel android-jetpack-compose dagger-hilt

我试图在两个地方获取视图模型,其中一个在 MainActivity 中使用:

val viewModel:MyViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)

另一个地方是在 compose 函数内部,使用:

val viewModel:MyViewModel = hiltViewModel()
Run Code Online (Sandbox Code Playgroud)

当我调试时,似乎那是两个不同的对象。无论如何,我可以在两个地方获得相同的对象吗?

Alt*_*ine 8

尽管您在不需要视图模型的情况下解决了问题,但问题仍然没有得到解答,因此我发布此内容以防其他人发现它有帮助。

这个答案解释了如何共享视图模型范围以及如何覆盖它。

如果您使用导航组件,应该会有所帮助。但是,如果您不想传递视图模型或覆盖提供的视图ViewModelStoreOwner模型,则可以在任何子可组合项中访问父活动的视图模型,如下所示。

val composeView = LocalView.current
val activityViewModel = composeView.findViewTreeViewModelStoreOwner()?.let {
    hiltViewModel<MyViewModel>(it)
}
Run Code Online (Sandbox Code Playgroud)