尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

应用导航:Navigation Compose 与 XML 遗留对照

应用导航:Navigation Compose 与 XML 遗留对照
📅 发布时间:2026/7/23 14:22:10

文章目录

  • 第 1 章 统一导航的价值
  • 第 2 章 Navigation Compose 基础
  • 第 3 章 返回栈与 NavOptions
  • 第 4 章 XML Nav 遗留对照
      • 踩坑
  • 第 5 章 深链与 ViewModel 作用域
  • 第 6 章 测试与反模式
  • 第 7 章 治理清单
  • 面试速查 · 追问链
      • 追问链 #1:Navigation Compose vs XML? 🔥
      • 追问链 #2:launchSingleTop 与 popUpTo? 🔥
      • 追问链 #3:深链谁解析? ⭐
      • 追问链 #4:多 BottomBar 栈? 💡
  • 完整链路一句通
  • 相关推荐

第 1 章 统一导航的价值

手动FragmentTransaction堆栈难测、深链难统一、返回键行为不一致。Navigation 组件把路由、参数、返回栈声明化。

场景现代默认遗留对照
新 Compose 功能Navigation Compose—
存量 XML 多 Fragment逐步迁移XML Nav Graph 维护

第 2 章 Navigation Compose 基础

@SerializabledataobjectHomeRoute@SerializabledataclassDetailRoute(valitemId:String)@ComposablefunAppNavHost(navController:NavHostController=rememberNavController()){NavHost(navController,startDestination=HomeRoute){composable<HomeRoute>{HomeScreen(onOpen={id->navController.navigate(DetailRoute(id))})}composable<DetailRoute>{entry->valroute=entry.toRoute<DetailRoute>()DetailScreen(itemId=route.itemId)}}}

Kotlin 2.x + Navigation 2.8+ 序列化 Route 替代字符串拼参。


第 3 章 返回栈与 NavOptions

navController.navigate(DetailRoute(id)){launchSingleTop=truepopUpTo<HomeRoute>{saveState=true}restoreState=true}
  • launchSingleTop:避免重复压入同一详情。
  • popUpTo+saveState:BottomBar 多栈切换保留状态。

预测性返回:与NavController.popBackStack()配合;勿与手动FragmentTransaction混用。


第 4 章 XML Nav 遗留对照

XML 时代nav_graph.xml+findNavController().navigate(R.id.action_*)仍可能维护存量。新路由进 ComposeNavHost;混排时用单一NavController桥接,避免双栈。

踩坑

  • 新功能仍手写transaction.replace堆栈。
  • startActivity与 Nav 混用导致返回跳过中间页。

第 5 章 深链与 ViewModel 作用域

// AndroidManifest 示意<intent-filter><action android:name="android.intent.action.VIEW"/><dataandroid:scheme="myapp"android:host="item"/></intent-filter>

navController.navigate(deepLinkUri)。ViewModel 用hiltViewModel()或navGraphViewModels绑定 NavBackStackEntry store(《ViewModel 与状态恢复》)。

Android 17:targetSdk 37后台经IntentSender启动 Activity 受后台启动(BAL)约束,深链入口宜在用户可见交互后触发。


第 6 章 测试与反模式

  • 测试:createAndroidComposeRule+ 测NavHost路由。
  • 反模式:导航逻辑散落在 Composable 深处——路由表集中管理。

第 7 章 治理清单

检查项通过标准
新 UICompose 用类型安全 Route
返回预测性返回走 NavController
参数无魔法字符串 Bundle 键(新代码)
作用域共享 VM 用 navGraphViewModels
混排单一 Nav 真相源

面试速查 · 追问链

追问链 #1:Navigation Compose vs XML? 🔥

参考回答:新 Compose 功能用 Compose Nav + 序列化 Route;XML 仅遗留维护。

追问链 #2:launchSingleTop 与 popUpTo? 🔥

参考回答:SingleTop 防重复实例;popUpTo 清栈到某目的地并可选 saveState。

追问链 #3:深链谁解析? ⭐

参考回答:NavController + Manifest intent-filter;参数进 Route 或 SavedStateHandle。

追问链 #4:多 BottomBar 栈? 💡

参考回答:嵌套navigation+ 各 tab 独立 startDestination + popUpTo 保存状态。


完整链路一句通

类型安全 Route→NavHost 注册 composable→navigate + NavOptions 管栈→ViewModel 绑 BackStackEntry→深链/BAL 合规入口。


相关推荐

  • Kotlin 作用域函数:let/apply 怎么选

  • Kotlin 语法与空安全:从零的第一课

相关新闻

  • UI-TARS 源码解析 #11:坐标格式转换:point、start_box、end_box 是如何被统一处理的?
  • 电脑内存条是干嘛用的?DDR4和DDR5有什么区别?
  • 2026绵阳黄金回收避坑指南:认准万金汇全国连锁更放心 - 观金堂黄金回收

最新新闻

  • Superset开源BI工具架构解析与二次开发指南
  • 书匠策AI:智能学术写作工具的功能解析与应用指南
  • 【2024最值得入手的7款AI音频处理工具】:音视频从业者私藏清单,限时免费试用通道即将关闭
  • 2026京城黄金回收“磨损费”陷阱:戴了十年的金项链凭什么扣我5%折旧?合法吗? - 日常财经早知道
  • 零跑A10智能座舱:SA8295芯片与2.5K屏的协同优化
  • 毕业论文问卷收不到数据?2026年四类样本平台回收方案对比实测

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号