You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:22:52