Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构。应用内Fragment页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。
在app的gradle.build中添加依赖:
def nav_version = "2.3.5"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
在activity布局文件中加入FragmentContainerView:
name为固定写法,必须指明为
androidx.navigation.fragment.NavHostFragment
defaultNavHost字段表示是否拦截返回按键操作
若为true,需要的Activity中重写onSupportNavigateUp方法。
默认情况下返回键是不会回退fragment页面的,完成即可使用回退键返回fragment页面。
override fun onSupportNavigateUp(): Boolean {
//调用扩展函数findNavController
return findNavController(R.id.nav_host_fragment).navigateUp()
}
需要设置navGraph导航图文件,继续在res文件夹下创建nav_graph.xml文件,定义相关fragment和各自的跳转逻辑。
导航图实现了3个fragment之间的前后跳转,设置要跳转的action。由于fragment代码简单,这里就不贴出来了。

跳转页面通过NavController来控制:
btnHome.setOnClickListener {
//通过传入action来实现导航
Navigation.findNavController(btnHome).navigate(R.id.fragment_home_to_fragment_msg)
}
跳转传递参数
var args = Bundle()
args.putString("params", "params")
Navigation.findNavController(btnHome).navigate(R.id.fragment_home_to_fragment_msg, args)
目标页接收参数:
var params = arguments?.getString("params")