首页 > 解决方案 > Jetpack 组合导航的多个参数

问题描述

如何声明具有多个导航参数的导航路线?我检查了文档所有这些 文章(似乎只是重申了文档所说的内容),我只能找到一个参数的路由示例。

这是我所拥有的:

composable(
  route = "createExercise/{exerciseId}",
  arguments = listOf(navArgument("exerciseId") { type = NavType.IntType })
) { backStackEntry ->
  CreateExerciseScreen(
    exerciseId = backStackEntry.arguments!!.getInt("exerciseId"),
  )
}

这就是我想要的:

composable(
  route = "createExercise/{exerciseId},{workoutId}",
  arguments = listOf(
    navArgument("exerciseId") { type = NavType.IntType },
    navArgument("workoutId") { type = NavType.IntType },
  )
) { backStackEntry ->
  CreateExerciseScreen(
    exerciseId = backStackEntry.arguments!!.getInt("exerciseId"),
    workoutId = backStackEntry.arguments!!.getInt("workoutId"),
  )
}

我为上面的示例任意选择了逗号分隔的语法来代替我正在寻找的真实语法。

所以,我的问题是:在声明导航路线时,多个参数的正确语法是什么?(那么可选参数呢?)

标签: androidandroid-jetpack-composeandroid-jetpack-navigation

解决方案


根据文档:

您可以将其视为通向特定目的地的隐式深层链接。

因此它遵循与网络上任何其他隐式深度链接和 RESTful URL 的约定相同的约定,通常使用 a/来分隔不同的参数以形成 URL 的路径 - 这涵盖了所需的参数:

createExercise/{exerciseId}/{workoutId}

根据可选参数文档,所需参数的路径可以后跟任意数量的可选参数,形式为一个或多个查询参数:

createExercise/{exerciseId}/{workoutId}?setNumber={setNumber}&repNumber={repNumber}

推荐阅读