拓冰建站拓冰建站
首页 / 资讯中心 / 正文

如何优雅地实现页面跳转:codelab-android-navigation中navigate与action两种方式对比

如何优雅地实现页面跳转codelab-android-navigation中navigate与action两种方式对比【免费下载链接】codelab-android-navigation项目地址: https://gitcode.com/gh_mirrors/co/codelab-android-navigationcodelab-android-navigation 是一个 Android Navigation导航组件官方 codelab 示例项目完整演示了导航图中页面跳转的两种主流方式navigate()直接跳转 与 基于action的声明式导航。读完后你将清楚两种 Android 页面跳转方式的写法、优劣与适用场景写出结构更清晰的导航代码。 为什么页面跳转有两种写法在 Android Navigation Component 中所有页面Destination都集中定义在一张导航图里。本项目在 mobile_navigation.xml 中声明了 3 个页面页面 ID对应 Fragment作用home_destHomeFragment首页导航起点flow_step_one_destFlowStepFragment多步流程第 1 步flow_step_two_destFlowStepFragment多步流程第 2 步从一张图出发触发跳转有两种风格navigate() 直接导航代码里直接写目标页面 IDaction 定义导航先在导航图 XML 中声明一条动作代码再按动作触发。 方式一navigate() 直接跳转在 HomeFragment.kt 中点击按钮后直接跳到流程第 1 步button?.setOnClickListener { findNavController().navigate(R.id.flow_step_one_dest, null) }一句话概括代码里硬编码目的地 ID。✅ 简单直观适合目的地在运行时才动态决定的场景❌ 跳转逻辑散落在各个 Fragment 中导航结构不集中❌ 想加过渡动画要另外写NavOptions见 HomeFragment.kt 中的 TODO STEP 6代码会变啰嗦。 方式二action 声明式导航action 是在导航图 XML 中预先定义好的一条跳转通道。mobile_navigation.xml 里为第 1 步页面定义了一个next_actionaction android:idid/next_action app:destinationid/flow_step_two_dest /action代码侧只用一行触发见 FlowStepFragment.ktview.findViewByIdView(R.id.next_button).setOnClickListener( Navigation.createNavigateOnClickListener(R.id.next_action) )action 的真正威力在于可在 XML 中直接附加导航行为例如第 2 步完成后一路弹栈回首页mobile_navigation.xmlaction android:idid/next_action app:popUpToid/home_dest /action同理过渡动画也能直接写在 action 上enterAnim / exitAnim / popEnterAnim / popExitAnim无需在代码里堆配置。✅ 导航结构集中可视所有谁能跳到谁一眼看尽✅ 动画、回退栈popUpTo声明式配置代码更干净✅ 改目的地只需改 XML不用满仓库找调用点⚠️ 目的地是编译期固定的运行时动态选目标时不太方便。⚖️ navigate 与 action 核心差异速查表对比维度navigate() 直接导航action 定义导航代码写法navigate(R.id.dest)createNavigateOnClickListener(R.id.action)过渡动画代码中配置 NavOptionsXML 属性直接声明回退栈控制代码中配置 popUpToXML 属性直接声明导航结构可见性分散在各 Fragment集中在导航图一处重构成本高需全局搜索调用点低只改 action 定义适用场景动态目的地固定流程、线性导航 新手如何选型多步骤流程注册向导、设置流程这类下一步/上一步→ 优先action把流程和动画都写进导航图目的地运行时才确定比如跳转到某个商品详情页→ 用navigate()想观察导航是否生效项目在 MainActivity.kt 中注册了OnDestinationChangedListener每切换页面都会弹出 Toast 提示当前目标调试导航时非常实用。 关键文件路径速览导航图定义mobile_navigation.xmlnavigate() 写法演示HomeFragment.ktaction 写法演示FlowStepFragment.kt导航容器与监听MainActivity.kt 总结两种页面跳转方式本质都是沿导航图移动区别在于导航意图写在哪里navigate()把意图留在代码里灵活但分散action把意图提升为导航图的一部分集中、声明式、易维护。对于新手而言默认优先使用action只在目的地动态变化时才退回navigate()——这就是优雅的 Android 页面跳转实践。【免费下载链接】codelab-android-navigation项目地址: https://gitcode.com/gh_mirrors/co/codelab-android-navigation创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门