Jetpack Compose多导航图同路由时NavController目标选择方案
场景与需求
应用使用单个NavHost和NavController,导航结构如下:
NavHost(initialRoute = "A"){ navigation(route = "A", initialRoute = "A1") { composable(route = "A1") {...} composable(route = "A2") { // 导航图A下的A2 ScreenA2() } } navigation(route = "B", initialRoute = "B1") { composable(route = "B1") {...} composable(route = "B2") {...} composable(route = "A2") { // 导航图B下的A2 ScreenA2() } } }
导航图“A”和“B”对应应用的两个标签页,切换标签页时通过导航到“A”或“B”路由,并保存恢复状态来维护各自独立的虚拟返回栈。需求是保留两个导航图中的“A2”路由,确保从每个导航图导航到A2时,各自维护独立的返回栈。
需要实现的行为:
- 处于“B1”路由时导航到“A2”,
navController应选择B/A2目标; - 处于“A1”路由时导航到“A2”,
navController应选择A/A2目标。
解决方案
Navigation库的2.8.0-beta07版本已实现该行为,核心变更为:
现在搜索导航目标时,不再从基础图开始,而是从当前目标最近的父NavGraph开始。这确保导航到共享/重复目标时,会优先选择离当前目标最近的那个。
内容的提问来源于stack exchange,提问作者Legoraccio
相关产品推荐
相关产品推荐

