You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jetpack Compose Navigation时传统XML导航图是否已过时?

问题描述

此前我在Android Studio项目中使用导航图时,正如官方文档所述,会通过存放在res\navigation目录下的XML文件定义所有跳转目的地。
目前我正在学习Jetpack Compose Navigation,参考官方代码实验室教程,如下代码来自上述教程提到的官方示例项目。
看起来Jetpack Compose Navigation通过这类逻辑实现导航,我在项目中没有找到res\navigation目录下的XML文件,因此有两个疑问:
1、使用Jetpack Compose Navigation时导航图已经被淘汰了吗?
2、使用Jetpack Compose Navigation时是否不再需要res\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)
        }
        ...
    }
}

解答

  • 导航图并没有被淘汰,只是声明形式做了适配调整。传统View体系下用XML文件声明导航配置的方式,是为了适配视图开发的模式;而Jetpack Compose Navigation改用Kotlin DSL来声明导航图,你给出的代码中NavHost的lambda参数部分就是完整的导航图定义,功能和XML导航图完全一致,同样包含了起始目的地、所有可跳转页面、跳转逻辑配置等核心内容。
  • 纯Compose开发的项目使用Navigation组件时,不需要再创建res\navigation目录下的XML导航图。只有当项目是混合开发模式,同时存在传统View页面和Compose页面时,才可能同时保留两种导航声明方式。

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:00