我有一个ViewModel,我已经将它注入到了一个Composable中。现在我想将该ViewModel的 * 相同示例 * 注入到我的Activity中。
在帐户屏幕中.kt
@Composable
fun AccountScreen(accountViewModel: AccountViewModel = hiltViewModel()) {
...
}
和我的活动课:
class MainActivity : ComponentActivity() {
@Inject
lateinit var accountViewModel: AccountViewModel
}
应具有相同的AccountViewModel示例。
我知道在Activity中使用@Inject
(如上面的示例)是行不通的。Hilt的文档建议使用ViewModelProvider
或by viewModels()
,这两种方法都为我提供了一个新的AccountViewModel示例,但我需要与AccountScreen Composable中的示例相同的示例。
2条答案
按热度按时间4dc9hkyq1#
我假设
AccountScreen
是NavGraph的一部分,因为您提到需要视图模型的相同示例,所以可以考虑在AccountScreen
中注入ViewModel时指定ViewModelStoreOwner,这样MainActivity
和AccountScreen
将共享视图模型的相同示例。bfnvny8b2#
我最终解决了这个问题,方法是在我的子Composable(在本例中为AccountScreen)中获取父Activity的ViewModel,如下所示:
在我的MainActivity中,我以标准方式获取ViewModel
感谢@z.g.y提供了一个有用的建议,让我找到了这个解决方案。