一分钟 由浅入深 学会Navigation

本文介绍了AndroidNavigation的官方概念,如何导入依赖并使用safeArgs进行数据传递,以及NavController的管理。重点讲解了数据单向传递(包括Bundle和safeArgs)和双向数据共享(通过ViewModel实现)的方法。
摘要由CSDN通过智能技术生成

目录

1.官网正式概念

1.1 初认知

2.导入依赖

2.1 使用navigation

2.2 safe Args插件-> 传递数据时用

3.使用Navigation

3.1 搭建初始框架

3.2 确定action箭头的属性

3.3 为Activity添加NavHostFragment控件

3.4 NavController 管理应用导航的对象

3.5 数据传递(单向)

3.5.1 最简单,也是Navigation自带的Bundle

3.5.2 safe Args插件

3.6 数据实时共享(双向,简略提及)


1.官网正式概念

1.1 初认知

大白话来讲:就是控制多fragment直接的切换,其中涉及数据的传递与更新,动画和内存堆栈,也需要了解Fragment的生命周期

2.导入依赖

2.1 使用navigation

dependencies {
        implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
        implementation("androidx.navigation:navigation-ui-ktx:2.6.0")

}

2.2 safe Args插件-> 传递数据时用

plugins {
    id("androidx.navigation.safeargs.kotlin")
    id ("kotlin-android-extensions")
}
plugins {
    id("androidx.navigation.safeargs") version "2.6.0" apply false
}

看晕了? :结合下图依次加上集成环境

3.使用Navigation

3.1 搭建初始框架

新建Android Resource Directory, type选择navigation

在Navigation Resource File确定fragment间导航关系

箭头是直接从一个fragment拖动到另一个点连接的,代表有一个action_from箭头尾_to头部

3.2 确定action箭头的属性

1.设置动画

enterAnim: 跳转时的目标页面动画

exitAnim: 跳转时的原页面动画

popEnterAnim: 回退时的目标页面动画

popExitAnim:回退时的原页面动画
2.传递的变量的默认值——》这个要在Fragment先设置接收,才有此属性

3.栈管理

popUpTo  :手动弹栈,将选定fragment,在栈钟上方的所有全部弹出

popUpInclusive:  默认false,    选中ture代表popUpTo时包括选定的fagment一起弹出栈

  这里假设 导航为 A->B->C->A

lauchSingleTop :  若此为ture, 跳转到的Fragment与栈顶相同,则复用栈顶Fragment

3.3 为Activity添加NavHostFragment控件

注意navGraph一定要正确         

3.4 NavController 管理应用导航的对象

一般在Fragment切换就行

切换方法:(这里action即是  目录3.2  的内容)

3.5 数据传递(单向)

3.5.1 最简单,也是Navigation自带的Bundle

 val navController = Navigation.findNavController(it)
        val bundle = Bundle()
        bundle.putString("key", "test")
        navController.navigate(R.id.action_fragmentA_to_fragmentB2, bundle)

接收

arguments?.getString("数据的key")

3.5.2 safe Args插件

这个需要添加插件  -》 详细参考 本文目录  2.2 

当传递数据为自定义类 -》还需要序列化接口

id 'kotlin-parcelize'

在nav_graph中   接收数据的Fragment 的Argument中 设置接受数据名字,类型和默认值

如Fragment_A  ->  Fragment_B 就是将数据当参数传入action

binding.ivAdd.setOnClickListener {
    val action = HomeFragmentDirections.actionHomeFragmentToDrawFragment(User("zhoujun"))
    findNavController().navigate(action)
}

接收数据

arguments.getString(数据的key)
arguments.getParcelable(数据的key)

3.6 数据实时共享(双向,简略提及)

自定义ViewModel类和属性

封装供外界修改数据的方法

作用:把所有viewModel统一,数据即使共享的

  • 39
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值