Navigation 是 Jetpack 组件库的一个组件,可以方便的管理 Fragment ,可以看作是针对于 Fragment 的路由。 功能主要是:用于管理 APP 页面跳转导航,同时,切换 Fragment 变得更加直观,通过可视化界面展示 Fragment 的切换流程图。
利用 Navigation 组件对 Fragment 的原生支持,可以获得架构组件的所有好处(例如生命周期和 ViewModel),同时让此组件来处理 FragmentTransaction 的复杂性。此外,Navigation 组件还可以处理转场动画。它可以自动构建正确的“向上”和“返回”行为,包含对深层链接的完整支持,并提供了帮助程序,用于将导航关联到合适的 UI 小部件,例如抽屉式导航栏和底部导航。
除此之外,Navigation 最大的一个好处是:让单 Activity 应用成为首选架构(即:单 Activity + 多 Fragment)。应用内 Fragment 页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。
二、Navigation 核心概念 NavGraph:导航图,一个 XML 资源,它包含集中在一个位置上的所有与导航相关的信息。这包括所有单独的内容区域(destination),以及用户可以通过应用程序访问的可能路径。就类似一个流程图,如下图。 NavHost:显示导航图中的 Destination 的容器。导航组件包含一个默认的 NavHost 实现 NavHostFragment。 NavController: 控制 NavHost 容器内容的切换的控制器。 Destination:目的片段,一般是 Fragment (由于 google 推荐单 Activity 模式 APP),也可以是 Activity。如下图的三个界面。 Action:动作,就相当于 intent,表示从一个 Destination 到另一个 Destination,如下图的箭头。
三、Navigation 使用
1. 导入依赖库
implementation 'androidx.navigation:navigation-fragment:2.2.1'
implementation 'androidx.navigation:navigation-ui:2.2.1'
2. 创建一个Activity和多个Fragment
按照业务逻辑创建,假设创建了MainActivity、FragmentA、FragmentB。
3. 新建 Navigation
在res
目录右键 New->New Resource File,弹出 New Resource File
的对话框
填写 File Name 如:nav_graph,Resource type 选择 Navigation
,点击OK
4. 使用 Navigation
打开
nav_graph.xml
,底部选择 Design 选项卡,点击 New Destination
(左上角 + ) 按钮,在弹窗中选择fragment_a.xml
、fragment_b.xml;
或选择
Create blank destination
新建 Fragment 之后选显示如下界面:
6. 添加 Action
左键按住 fragment 右侧中间的圆圈然后拖动到要导航的 fragment 然后松手。
Enter 进入一个目的地 (例如 A跳B, B显示时执行的动画) Exit 退出一个目的地 (例如 A跳B,A隐藏时执行的动画) Pop Enter通过 pop 操作进入目的地 (例如 A跳B,B navigateUp 后 A再次出现时执行的动画) Pop Exit 通过pop 操作退出目的地 (例如 A跳B,B navigateUp 后 B消失时执行的是这个动画)
作者:Fighting_初心