Jetpack Compose:页面导航返回时如何保留ViewModel状态?
解决Jetpack Compose导航返回时ViewModel状态丢失问题
问题根源
你在Screen2中使用navController.navigate("screen1")跳回Screen1时,会在导航栈中新增一个Screen1的实例,而非回到之前已存在的那个。新的Screen1实例会创建全新的MyView ViewModel,导致原有状态丢失。
解决方案
将Screen2中返回按钮的点击逻辑改为使用navController.popBackStack(),这个方法会弹出当前的Screen2页面,回到栈中之前存在的Screen1实例,对应的ViewModel会被保留,状态自然不会丢失。
修改后的代码
@Composable fun screen2(navController: NavHostController, name: String) { Column { Text(text = "Name: $name", style = MaterialTheme.typography.bodyLarge) Spacer(modifier = Modifier.height(16.dp)) Button(onClick = { // 替换navigate为popBackStack navController.popBackStack() }) { Text(text = "Navigate to Screen 1") } } }
额外说明
你的MyView ViewModel已经正确使用SavedStateHandle实现了状态持久化,即使遇到页面重建(如屏幕旋转),状态也能自动恢复。现在只需修正导航方式,就能解决返回时状态丢失的问题。
内容的提问来源于stack exchange,提问作者succeed
相关产品推荐
相关产品推荐

