当前位置: 首页 > news >正文

第四章:NavigationCompose页面导航

第四章:Navigation Compose 页面导航

Navigation Compose 是官方提供的声明式导航解决方案,替代传统的 Fragment 管理。


4.1 路由常量定义

避免魔法字符串,统一管理路由:

// AppRoutes.ktobjectAppRoutes{constvalHOME="home"constvalPROFILE="profile"constvalARG_ARTICLE_ID="articleId"constvalDETAIL="detail/{$ARG_ARTICLE_ID}"// 参数路由fundetailRoute(articleId:Int):String="detail/$articleId"}

路由类型:

类型示例说明
固定路由"home"无参数
参数路由"detail/{articleId}"路径参数
查询路由"detail?tab=1"URL 参数

4.2 导航图 AppNavGraph

@ComposablefunAppNavGraph(){valnavController=rememberNavController()NavHost(navController=navController,startDestination=AppRoutes.HOME,// 起始页面){composable(AppRoutes.HOME){HomePage(navController)}composable(AppRoutes.PROFILE){ProfilePage(navController)}composable(route=AppRoutes.DETAIL,// detail/{articleId}arguments=listOf(navArgument(AppRoutes.ARG_ARTICLE_ID){type=NavType.IntType})){backStackEntry->valarticleId=backStackEntry.arguments?.getInt(AppRoutes.ARG_ARTICLE_ID)?:0DetailPage(navController=navController,articleId=articleId)}}}

关键点:

  • NavHost是导航容器,管理页面栈
  • composable注册页面,route 参数定义路径
  • arguments声明路由参数及其类型
  • backStackEntry.arguments获取传递的参数

4.3 页面间跳转

@ComposablefunHomePage(navController:NavController){// 跳转到详情页valonArticleClick:(ArticleBean)->Unit={article->navController.navigate(AppRoutes.detailRoute(article.id))}// 跳转到个人中心valonProfileClick:()->Unit={navController.navigate(AppRoutes.PROFILE)}}

返回上一页:

IconButton(onClick={navController.popBackStack()}){Icon(Icons.AutoMirrored.Filled.ArrowBack,contentDescription="返回")}

4.4 详情页参数传递流程

首页列表点击 ↓ navController.navigate("detail/123") ↓ NavHost 匹配 route = "detail/{articleId}" ↓ backStackEntry.arguments?.getInt("articleId") → 123 ↓ DetailPage(articleId = 123) ↓ DetailViewModel(articleId) ↓ ArticleRepository.getArticleById(123)

4.5 startDestination 与 deep link

NavHost(navController=navController,startDestination=AppRoutes.HOME,){/* ... */}

startDestination:应用启动时的第一个页面
deep link:可被外部调用的链接(如https://myapp.com/detail/123


4.6 导航最佳实践

实践说明
路由常量化避免魔法字符串,用 object 管理
参数类型声明NavType.IntType / StringType / FloatType
回退时清栈popUpTo可控制返回栈
key 唯一性重复进入同一页面用不同 key 区分

示例:返回时清空整个栈(从详情页返回直接到首页):

navController.navigate(AppRoutes.HOME){popUpTo(AppRoutes.HOME){inclusive=true}}

4.7 总结

  • AppRoutes 统一管理路由常量
  • NavHost + composable 注册页面
  • navigate() 执行跳转,popBackStack() 返回
  • arguments 声明参数,backStackEntry 获取
  • 参数通过函数参数层层传递到 ViewModel

上一章:第三章:MVVM 架构与 ViewModel 下一章:第五章:数据层 — 网络请求与 Repository

http://www.jsqmd.com/news/842567/

相关文章:

  • 2026行星减速机/斜齿减速机供应商推荐:斜齿减速机供应厂家+行星减速机供应厂家精选 - 栗子测评
  • 基于单相全波晶闸管的基本交流电压控制器,带电阻负载(Simulink仿真实现)
  • Linux服务器网卡配置保姆级教程:从ifcfg-eth0文件到ethtool调优全解析
  • 告别Android.mk:手把手教你用Soong和Blueprint编写你的第一个Android.bp模块
  • 转:调动员工积极性的七个关键
  • Python爬虫实战:如何优雅地抓取在线学习平台 FAQ 构建高质量语料库?
  • Armv8原子操作调试:LDXR/STXR指令对与独占监视器
  • 【人工智能】GenFlow 4.0是由百度个人超级智能事业群(PSIG)于 2026 年 4 月 27 日联合百度文库与百度网盘重磅发布的新一代通用 AI 智能体(AI Agent)。
  • 共享内存概述
  • 2026红西柚果粒厂家推荐+柑橘果粒厂家推荐:源头直供,品质优选 - 栗子测评
  • 高并发应用场景
  • 如何优化 ECS 实例的网络带宽峰值应对突发流量
  • 2026柚子皮厂家推荐:全品类供应,高性价比之选 - 栗子测评
  • 【网安-Web渗透测试-内网渗透】内网信息收集(工具)
  • 恒立直线导轨供应商哪家好?2026直线导轨定制厂家汇总:直线导轨供应厂家推荐+RUSON中空旋转平台供应商推荐 - 栗子测评
  • 量子计算中SIMD编译优化与离子阱架构实践
  • FastAPI + SQLite 实战:从零搭建个人记账系统
  • 计算机毕业设计 | vue+springboot高校宿舍 学生住宿管理系统(附源码+论文+讲解视频)
  • 3步实现B站视频转文字:让学习笔记制作变得轻松简单
  • 第六章:UI组件与Material3主题
  • Blender-Armatures
  • C51可重入函数原理与实践指南
  • 2026香柚果茸厂家推荐:优质原料直采,风味纯正 - 栗子测评
  • 第一阶段开发复盘与优化纪要
  • 电镀整流机源头厂家:企业采购选型策略深度解析
  • HTML代码加密工具源码_在线网页加密解密_防复制源码
  • 2026合金铝板定制厂家甄选:花纹铝板生产厂家+防滑铝板生产厂家+防滑铝板源头厂家汇总 - 栗子测评
  • 向量数据库横评:Milvus vs Pinecone vs Weaviate 选型指南
  • NotebookLM具身智能落地实战(从零部署到ROS2集成):谷歌AI团队内部培训手册泄露版
  • 解决FlexNet Publisher许可证协议不匹配错误-83