一.简介二.优劣势
2.1 优势2.2 劣势 三.使用
3.1 引入依赖3.2 创建三个fragment3.3 编写navigation xml跳转流程3.4 根据跳转流程编写跳转代码和传参3.5 将NavHostFragment放到activity中 四.Safe Args安全传值
4.1 配置4.2 传值4.3 接收传值
一.简介二.优劣势 2.1 优势Navigation是一个可简化的Android导航的库和插件,换句话说,通过可视化的方式来进行管理的。
处理Fragment的切换默认情况下正确处理Fragment的前进和后退为过渡和动画提供标准化的资源可以绑定Toolbar/BottomNavigationView/ActionBar等数据传递时提供类型安全性(使用SafeArgs)ViewModel支持 2.2 劣势
fragment切换后底层会调用replace方法导致会被不断销毁,无法保存上一次的状态 三.使用 3.1 引入依赖
dependencies {
val nav_version = "2.4.0"
// Java language implementation
implementation("androidx.navigation:navigation-fragment:$nav_version")
implementation("androidx.navigation:navigation-ui:$nav_version")
// Kotlin
implementation("androidx.navigation:navigation-fragment-ktx:$nav_version")
implementation("androidx.navigation:navigation-ui-ktx:$nav_version")
// Feature module Support
implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")
// Testing Navigation
androidTestImplementation("androidx.navigation:navigation-testing:$nav_version")
// Jetpack Compose Integration
implementation("androidx.navigation:navigation-compose:2.5.0-alpha01")
}
3.2 创建三个fragment
这里创建三个fragment WelcomeFragment RegisterFragment LoginFragment
我们设想的是这样在welcomefragment中写两个按钮 第一个跳转到RegisterFragment ,第二个跳转到LoginFragment并传递参数
首先创建navigation文件
在res目录右键选择new -> Android Resource File name自己设定 类型选择navigation
然后依据上面的设想我们编写了如下的navigation的代码
针对如上的代码进行参数的详解
| 名称 | 含义 |
|---|---|
| 文件必须以开头,以结尾,标识这是一个Navigation文件 | |
| app:startDestination | 默认的起始的fragment所对应的id,此处意味着WelcomeFragment作为起始的Fragment |
| Navigation所操作的都是Fragment | |
| 对应的Fragment的id | |
| fragment完整路径 | |
| 对应的fragment布局 | |
| 传参的key | |
| 传参的默认值 | |
| 传参类型 |
从welcomefragment跳转到registerfragment不需要传参
从welcomefragment到loginfragment需要传参
其中id就是我们在navigation文件中设置的fragment的id
最后一步就是NavHostFragment放到activity中
在activity的布局文件中添加
其中name是固定的
navGraph就是索引的3.3创建的navigation文件
根部build中添加classpath
buildscript {
repositories {
google()
}
dependencies {
val nav_version = "2.4.0"
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
}
}
配置id
//java
plugins {
id("androidx.navigation.safeargs")
}
//kotlin
plugins {
id("androidx.navigation.safeargs.kotlin")
}
编写navigation文件中的传值标签
点击 Make Project
这样就在app-build-generated-source-navigation-args下生成了配置文件
val name = RegisterFragmentArgs.Builder().setName("hahah").build().toBundle()
findNavController().navigate(R.id.RegisterFragment,name)
4.3 接收传值
var bundle = arguments
if (bundle != null) {
val name = RegisterFragmentArgs.fromBundle(bundle).name
text.setText(name)
}



