我有一个活动应用程序,仅使用 ui 的可组合项(一个活动,没有片段)。我使用一个视图模型在两个不同的屏幕(可组合项)中保存 ui 的数据。我按照状态文档中的描述在两个屏幕中创建视图模型
@Composable
fun HelloScreen(helloViewModel: HelloViewModel = viewModel())
Run Code Online (Sandbox Code Playgroud)
现在我注意到在第一个屏幕中加载或设置的数据在第二个屏幕中被重置。
我还注意到init{}每次被调用时viewModel()都会被调用。这真的是预期的行为吗?
根据该方法的文档,它应该返回现有的 ViewModel 或创建一个新的 ViewModel。
我还看到视图模型是不同的对象。所以viewModel()总是创建一个新的。但为什么?
有什么想法我可能做错了什么吗?或者我误解了该方法的用法?
使用 Compose,可以通过以下方式实现“每个屏幕状态”:
NavHost(navController, startDestination = startRoute) {
...
composable(route) {
...
val perScreenViewModel = viewModel() // This will be different from
}
composable(route) {
...
val perScreenViewModel = viewModel() // this instance
}
...
}
Run Code Online (Sandbox Code Playgroud)
“应用程序状态”可以通过以下方式实现:
val appStateViewModel = viewModel()
NavHost(navController, startDestination = startRoute) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是对于“Scoped State”呢?我们如何在 Compose 中实现它?
android android-navigation android-viewmodel android-jetpack-compose
任何人都知道如何在不同的可组合项之间保留共享视图模型对象?我正在使用 hilt 并在可组合项中使用 hilt 注入视图模型实例。基本上有 3 个屏幕共享相同的数据和更改,我想共享它,并且我正在考虑通过共享视图模型共享这些数据。
myViewModel: MyViewModel = hiltViewModel()
Run Code Online (Sandbox Code Playgroud)
那么我如何使用这个 MyViewModel 作为共享视图模型?