在移动应用中,导航路由 是一种将不同页面(可组合项)与唯一标识符(路由)映射的机制。
就像城市的路牌和地图,路由告诉应用:“当用户点击‘详情’时,请跳转到 detail/{id} 页面”。
“home” → 首页“profile” → 个人中心“article/{id}” → 文章详情| 痛点 | 导航如何解决 |
|---|---|
| ❌ 手动管理页面状态 | Navigation 自动保存和恢复返回栈状态 |
| ❌ 页面间传参混乱 | 类型安全参数 + 路由模板,清晰传递数据 |
| ❌ 深层链接难以实现 | 声明式路由,一键支持外部链接跳转 |
| ❌ 动画/过渡不统一 | 内置动画支持,一致的用户体验 |
| ❌ 代码耦合度高 | 路由解耦页面,独立开发、测试 |
🎯 Jetpack Compose Navigation 是官方声明式导航组件,专为 Compose 设计。
核心依赖:androidx.navigation:navigation-compose
// 定义路由
sealed class Screen(val route: String) {
object Home : Screen("home")
object Detail : Screen("detail/{itemId}") {
fun createRoute(id: Int) = "detail/$id"
}
}
// NavHost 设置
NavHost(navController = navController,
startDestination = Screen.Home.route) {
composable(Screen.Home.route) {
HomePage(navController)
}
composable(
route = Screen.Detail.route,
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("itemId") ?: 0
DetailPage(id, navController)
}
}
// 点击跳转 navController.navigate(Screen.Detail.createRoute(42)) // 返回上一页 navController.popBackStack()