当我使用 Jetpack Compose Navigation 时,导航图是否已过时?

Hel*_*oCW 6 android android-jetpack-compose

在我在 Android Studio 项目中使用导航图之前,就像文章中所说的那样。

我使用位于文件夹中的 xml 文件res\navigation来包含我所有不同的目的地。

目前,我正在通过文章学习Jetpack Compose Navigation

代码A来自上面文章提到的官方示例项目。

Jetpack Compose Navigation 似乎使用代码 A 和其他代码进行导航,并且我在res\navigation文件夹中找不到任何 XML 文件。

1:当我使用 Jetpack Compose Navigation 时,导航图是否会被废弃?

res\navigation2:当我使用Jetpack Compose Navigation时,是否不需要再次使用位于文件夹中的导航图?

代码A

@Composable
fun RallyNavHost(navController: NavHostController, modifier: Modifier = Modifier) {
    NavHost(
        navController = navController,
        startDestination = Overview.name,
        modifier = modifier
    ) {
        composable(Overview.name) {
            OverviewBody(
                onClickSeeAllAccounts = { navController.navigate(Accounts.name) },
                onClickSeeAllBills = { navController.navigate(Bills.name) },
                onAccountClick = { name ->
                    navigateToSingleAccount(navController, name)
                },
            )
        }
        composable(Accounts.name) {
            AccountsBody(accounts = UserData.accounts) { name ->
                navigateToSingleAccount(navController = navController, accountName = name)
            }
        }
        composable(Bills.name) {
            BillsBody(bills = UserData.bills)
        }
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 10

导航始终具有三种构建NavGraph对象的方法:

  1. 通过使用NavGraph构造函数本身手动进行。虽然这是此处列出的所有其他方法的基础,但您并不意味着直接使用这些 API。

  2. 通过导航 XML构建图表。这是一种使用 Navigator Editor 工具和Safe Args 插件在编译时构建图形的方法。此方法仅支持使用 Fragment 进行导航。

  3. 使用导航 Kotlin DSL。这提供了一种在运行时使用Kotlin DSL以编程方式构建导航图的类型安全方法。此方法支持使用片段导航和导航撰写。

由于 Compose 是一种以编程方式构建 UI 的方式,因此 Navigation 仅支持构建图形的编程版本 - 通过 Kotlin DSL,这正是尾随 lambda 为NavHost您提供的内容:它是相同的NavGraphBuilder范围,允许您调用navigation(...) {}来构建嵌套图表composable向图表添加新目标。

所有概念都是相同的,因为NavGraph无论您实际如何构建图形,您构建的底层最终在运行时都是完全相同的对象集。