JetPack之Navigation使用

时间:2021-6-4 作者:qvyue

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代码简单,这里就不贴出来了。

JetPack之Navigation使用

跳转页面通过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")
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。