传递参数
向目的地传递数据
传递参数 是 CoddyKit 上的免费 Android Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
在屏幕之间传递数据
目标屏幕通常需要一些数据,例如要显示的项目 ID。在 Navigation Compose 中,您可以直接将参数编码到路由中,方式类似于 URL。
带占位符的路由
使用花括号在路由中声明占位符。这里的 {id} 是名为 id 的参数。
composable("details/{id}") { backStackEntry ->
// read id here
}声明参数类型
使用 arguments 和 navArgument 告知导航器参数的类型。导航器会为您验证并转换该值。
composable(
"details/{id}",
arguments = listOf(navArgument("id") { type = NavType.IntType })
) { /* ... */ }NavType
NavType 用于声明参数的数据类型,例如 IntType、StringType、BoolType 等。导航器会根据声明解析路由值。
读取参数
目标 lambda 会为您提供一个 backStackEntry。请从 backStackEntry.arguments 中读取参数。
composable(
"details/{id}",
arguments = listOf(navArgument("id") { type = NavType.IntType })
) { backStackEntry ->
val id = backStackEntry.arguments?.getInt("id") ?: 0
DetailsScreen(id = id)
}使用值进行导航
要打开屏幕,请使用实际值替换占位符,构建路由字符串。
navController.navigate("details/42")安全地构建路由
使用字符串模板插入值。请确保路径片段与声明的路由完全匹配。
val itemId = 42
navController.navigate("details/$itemId")可选参数
可选参数使用带有 ?name=value 和 defaultValue 的查询字符串形式。导航时可以省略这些参数。
composable(
"search?query={query}",
arguments = listOf(navArgument("query") {
defaultValue = ""
})
) { /* ... */ }字符串参数需要谨慎处理
字符串参数必须符合 URL 安全要求。请避免通过路由传递长文本或斜杠;对于这类数据,建议使用共享的 ViewModel,或使用 ID 作为键的仓库。
传递 ID,而不是对象
最佳实践是:通过路由传递简短的标识符(例如项目 ID),然后在目标屏幕中查找完整对象。不要将大型对象序列化到路由中。
整合应用
列表导航到详情屏幕,并传递所选项目的 ID。
composable("list") {
ListScreen(onItemClick = { id ->
navController.navigate("details/$id")
})
}
composable(
"details/{id}",
arguments = listOf(navArgument("id") { type = NavType.IntType })
) { entry ->
val id = entry.arguments?.getInt("id") ?: 0
DetailsScreen(id = id)
}快速检查
如何在路由中声明一个名为 id 的必需整数参数?
回顾
传递参数:
- 在路由中加入
{placeholder}。 - 使用
navArgument+NavType声明类型。 - 从
backStackEntry.arguments中读取参数。 - 用实际值替换占位符后进行导航;传递较小的 ID,而不是大型对象。
常见问题解答
「传递参数」课时是免费的吗?
是的 — 「传递参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「传递参数」这节课中我会学到什么?
向目的地传递数据 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「传递参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。