一分钟 由浅入深 学会Navigation

目录

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统一,数据即使共享的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/407292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DAY29--learning English

一、积累 1.sign up for 2.business trip 3.calendar 4.acne 5.band-aid 6.scar 7.prescription 8.pimple 9.saucy 10.slurp 11.germaphobe 12.shred 13.boggle 14.platser 15.lick 16.sling 17.smack 18.stereotype 19.salmon 20.cable 二、练习 1.牛津原译 calendar. /ˈk…

broom系列包: 整理模型输出结果

broom包 说明 tidy、augment和glance函数的输出总是一个小tibble。 输出从来没有行名。这确保了您可以将它与其他整洁的输出组合在一起,而不用担心丢失信息(因为R中的行名不能包含重复)。 有些列名保持一致,这样它们就可以跨不同的模型进行组合。 tidy(…

IOBR2 更新(学习自备)

IOBR查看其收录的相关基因集(自备)_肿瘤 tme特征 iobr-CSDN博客 IOBR2:多维度解析肿瘤微环境 - 知乎 (zhihu.com) 学习手册:https://iobr.github.io/book/ (里面有详细教程) 系统综合的分析工具(Immuno-Oncology Bi…

低代码与大语言模型的探索实践

低代码系列文章: 可视化拖拽组件库一些技术要点原理分析可视化拖拽组件库一些技术要点原理分析(二)可视化拖拽组件库一些技术要点原理分析(三)可视化拖拽组件库一些技术要点原理分析(四)低代码…

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021 前言简介方法实现Emotion ReasonerResponse Generator实验结果示例总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Improv…

unity Aaimation Rigging使用多个约束导致部分约束失去作用

在应用多个约束时,在Hierarchy的顺序可能会影响最终的效果。例如先应用了Aim Constraint,然后再应用Two Bone Constraint,可能会导致Two Bone Constraint受到Aim Constraint的影响而失效。因此,在使用多个约束时,应该仔…

基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真.mppt采用爬山法实现,仿真输出MPPT控制效果,功率,转速等。 2.系统仿真结果 …

ONLYOFFICE8.0——赋能办公

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-xdAoM2pHRmDFP0tF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

修复Microsoft Edge WebView2无法安装的问题

修复Microsoft Edge WebView2无法安装的问题 场景解决方案 场景 系统:win11 电脑:联想14 前提:使用Geek Uninstaller强制删除了Microsoft Edge WebView2 同时下载了clash verge。 发现根本无法运行(点击了无任何反应且图标颜色…

第二篇:CamX初认识(框架、代码结构介绍)

第二篇:CamX初认识 这篇文章分下面几点来展开: 1、CamX整体架构图; 2、CamX基本组件及其概念; 3、CamX代码目录结构; 4、CamX相关名词; 一、CamX整体架构图 目前Android主流的机型,采用高通芯片的,使用的基本都是camx架构。 之前旧的架构叫做mm-camera,camx架构…

苹果设备再现完美兼容32位软件 只需一款神奇CrossOver 24工具

近日,CodeWeavers发布了CrossOver 24版本的更新。这次的更新是基于最新的Wine 9.0版本而进行的。这一版本的更新不仅能够兼容更多应用程序和游戏,而且还可以初步支持运行32位的应用程序。 自从苹果在macOS Catalina系统中移除对32位软件的支持之后&…

【读博杂记】:近期日常240223

近期日常 最近莫名其妙,小导悄悄卷起来,说要早上八点半开始打卡,我感觉这是要针对我们在学校住的,想让我们自己妥协来这边租房子住,但我感觉这是在逼我养成规律作息啊!现在基本上就是6~7点撤退,…

51单片机学习(4)-----独立按键进一步控制LED灯

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 独立按键灵活控制LED 程序一:单个独立按键控制多个…

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好(易于调试)的代码1、优秀的代码2、示范(1)模拟 strcpy 函数方法一:方法二:方法三:有弊端方法四:对方法三进行优化assert 的使用 方法五…

SORA技术报告

文档链接:https://openai.com/research/video-generation-models-as-world-simulators 文章目录 Video generation models as world simulatorsTurning visual data into patchesVideo compression networkSpacetime latent patchesScaling transformers for video …

【C++】字符类型和字符数组-string

STL-容器 - string 字符串必须具备结尾字符\0 #include<iostream> #include<string> using namespace std; //STL-容器 - string char ch[101];//字符串必须具备结尾字符\0 int main() {int n; cin >> n;for (int i 0; i < n; i) {cin >> ch[i];}…

iptables和五链四表相关规则说明

文章目录 1. iptables的作用2. iptables和netfilter的联系和区别3. 四表五链说明3.1 四表3.2 五链3.3 表与链之间的包含关系 4. iptables规则的常用命令和使用方法4.1 iptables规则组成4.2 规则数据管理 5. 常用的iptables场景5.1 禁止外部主机ping内部主机5.2 禁止某些端口访问…

Linux——动态库

Linux——动态库 gcc 指令生成动态库动态库的使用动态库与静态库区别直接装到系统中软连接LD_LIBRARY_PATH直接修改动态库的配置文件 上一次我们了解了静态库&#xff0c;这次我们来了解动态库&#xff0c;如果还有没看过上一篇静态库的小伙伴&#xff0c;可以点击这里&#xf…

【深度学习笔记】3_6 代码实现softmax-regression

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

LeetCode206: 反转链表.

题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 解题方法 假设链表为 1→2→3→∅&#xff0c;我们想要把它改成∅←1←2←3。在遍历链表时&#xff0c;将当前节点的 next指针改为指向前一个节点。由于节点没有引用其前一…