使用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
相关产品推荐
相关产品推荐

