应用导航:Navigation Compose 与 XML 遗留对照
2026/7/23 13:57:09 网站建设 项目流程

文章目录

  • 第 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 保存状态。


完整链路一句通

类型安全 RouteNavHost 注册 composablenavigate + NavOptions 管栈ViewModel 绑 BackStackEntry深链/BAL 合规入口


相关推荐

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询