Navigation 指南
[toc]
由于官网暂时没有中文版本,所以在这里根据内容抽空做了一些中文的版本.
原文首发于 https://leonchen1024.com/2019/07/04/Navigation/#more
Navigation
是用来管理你的app中内容的跳转,返回等操作.它主要包含了以下三个部分:
-
Navigation graph
: 一个 xml 资源包含了所有的导航相关的信息. 这些信息包含了你app里所有独立的内容区域,也就是destinations
. -
NavHost
: 一个空白的容器用来展示你的Navigation graph
中的destinations
.Navigation
模块中包含了一个默认的实现NavHostFragment
用来展示 Fragment 的destinations
. -
NavController
: 一个管理 NavHost 中的导航的对象. 会在用户使用app的时候管理 NavHost 中的内容.
当在页面内导航的时候,你可以告诉 NavController 你想要通过Navigation graph 中的某个路径或者直接导航到一个destination .这时候 NavController 就会在 NavHost 中展示合适的 destination.
Navigation 模块还提供了其他的好处,比如:
- 处理了 fragment transactions
- 默认情况下正确的处理了向上和返回动作
- 为动画和过渡提供了标准化的资源
- 实现和处理了深链接
- 内置了 Navigation UI 组件,比如 navigation drawers 和 bottom navigation,可以减少附加的工作
- Safe Args - 一个 Gradle 插件当导航并在两个目的地中传递数据的时候提供了类型安全机制
- ViewModel 支持 - 你可以将 ViewModel 的作用域设置为 navigation graph 来在不同的 目的地之间共享 UI 相关连的数据
并且你还可以使用 Android Studio's Navigation Editor 来查看和编辑 navigation graphs.
原文首发于 https://leonchen1024.com/2019/07/04/Navigation/#more
Next steps
For more documentation and resources related to the Navigation component, see the following.
Getting started
Further topics
- Principles of Navigation
- Design for different form factors
- Design navigation graphs
- Nested graphs
- Global actions
- Conditional navigation
- Pass data between destinations
- Create a deep link for a destination
- Animate transitions between destinations
- Update UI components with NavigationUI
- Create swipe views with tabs
- Interact programmatically with the Navigation component
- Test navigation
- Add new destination types
- Provide custom back navigation
- Migrate to the Navigation component
Additional resources
To learn more about navigation, see the following additional resources.
Samples
Codelabs
Blog posts
Videos
- 10 Best Practices for Moving to a Single Activity
- Single Activity: Why, When, and How (Android Dev Summit '18)
- Android Jetpack: manage UI navigation with Navigation Controller (Google I/O '18)
Reference
https://developer.android.google.cn/guide/navigation
About Me
我的博客 leonchen1024.com
我的 GitHub https://github.com/LeonChen1024
微信公众号
在这里插入图片描述