官网镇楼:
https://developer.android.com/guide/navigation
很多人在学习JetPack的时候喜欢到处找资料和各种学习的博客,但其实,官网上的资料已经很丰富了,而且写的很好,大部分时间,只需要先将官网上的资料吃透,基本上已经秒杀市面上80%的博客和文章了。
这篇文章并不会花大篇幅讲解Navigation的各种使用,因为官网文档已经无比详细了,本篇文章更重要的是讲解设计原理和核心概念的分析。
Navigation是JetPack中非常重要的一员,他对现代化的Android JetPack架构,提供了基础,是构建整体架构的核心组件。同时,Navigation也是一个优秀的Fragment管理工具(当然,不仅仅是管理Fragment,Activity也是可以的),可以很好的处理之前使用Fragment那些不是很好的方面,通过Navigation,开发者可以将重点放在业务开发上,避免处理太多了Fragment管理代码和调用代码,从而加速业务开发效率。
- 提供了Fragment管理容器
- 支持Deeplink、URL Link定位到Fragment
- Fragment、Activity间更加安全的参数传递
- 更加方便的处理过渡动画
使用Navigation主要需要创建以下几个部分的代码:
- Navigation Graph:用于对Fragment进行配置的配置文件,需要在res/navigation/下创建的xml文件
- FragmentContainerView/NavHostFragment:一系列Fragment的容器,用于承载Fragment
- NavController:用于处理Fragment路由跳转
下面通过一个简单的例子,来演示下,如何使用Navigation。
引入依赖
implementation "androidx.fragment:fragment-ktx:1.2.0"
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0"
创建测试Fragment和Activity
class LoginFragment : Fragment(R.layout.fragment_login) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}
类似这样的测试Fragment,不浪费笔墨了。
创建Navigation Graph
在res文件夹下创建navigation文件夹,并定义一个xxxx.xml文件,选择类型为navigation。
这时候,将测试的Fragment导入Design视图,就可以看见这些Fragment的界面了,通过每个视图左右拉出来的箭头,就可以生产一个路由Action,如图所示。
通过可视化界面,可以很清楚的看见Fragment间的路由路径,同时要注意的是,单个Fragment可以生成不止一个Action,例如一个Fragment可以跳转多个其他Fragment。
通过Design生成的代码如下所示。
对于navigation标签来说,最重要的是它的startDestination属性,即类似MainActivity的概念,代表了路由的起点。多个destination连接起来就组成了一个栈导航图