当前位置: 首页 > news >正文

【Android】Navigation动态设置Graph和Launch参数

需求

Activity和Fragment可以服用,不同的启动方式,Fragment调用栈不同

方案

不同的启动方式,通过代码动态设置,使用不同的NavGraph

注意

动态设置代码是在onCreate之后执行的

NavHost如果指定了Graph,在onCreate后会立刻启动,可能会造成启动两个Fragment栈

所以使用动态Graph方案的话,在NavHost中不能设置app:navGraph

动态设置代码
private fun setNavGraph() {// launch intentval purpose = intent.extras?.getString(AccountVerifyPurpose.KEY_PURPOSE)val bundle = Bundle()bundle.putString(AccountVerifyPurpose.KEY_PURPOSE, purpose)// choose nav graphval navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host) as NavHostFragmentnavController = navHostFragment.navControllernavController.setGraph(chooseNavGraph(purpose), bundle)
}private fun chooseNavGraph(purpose: String) = when (purpose) {xxx -> R.navigation.nav_graph_xxxxxx -> R.navigation.nav_graph_xxxxxx -> R.navigation.nav_graph_xxxxxx -> R.navigation.nav_graph_xxxelse -> R.navigation.nav_graph_xxx
}
共享数据

不同的Fragment如果想要共享数据的话,可以通过共享ActivityScope的ViewModel来实现

在Activity和Fragment中通过以下代码获取AccountCenterViewModel,拿到的将是同一份对象

private val accountViewModel by lazy {ViewModelProvider(this)[AccountCenterViewModel::class.java]
}
accountViewModel.account.value = xxx
private val accountViewModel by lazy {ViewModelProvider(requireActivity())[AccountCenterViewModel::class.java]
}
println(accountViewModel.account.value)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Qt详解QPropertyAnimation创建属性动画
  • SQLserver中的日期时间
  • 牛津大学发布首篇《Transformer多模态学习》综述论文,23页pdf涵盖310篇文献全面阐述MMT的理论与应用
  • 智能废弃瓶子垃圾箱:城市环境的绿色守护者
  • javascript语句之switch
  • 鸿蒙(API 12 Beta3版)【使用ImagePacker完成图片编码】图片开发指导
  • Prompt + 工作流组件 = AI智能体:开启智能化新时代
  • SBB | 南京林业大学阮宏华团队揭示人工林发育过程中土壤有机碳积累的主要机制
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十四)
  • 若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)
  • vivo手机短信删除了怎么恢复?恢复办法分享
  • Java 中的抽象工厂模式:优雅地掌握对象创建
  • vc矩阵计算(转置,点乘,逆矩阵)
  • 掌握PyTorch模型的版本控制:高效管理与迭代
  • MQ-2烟雾传感器模块功能实现(STM32)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • CAP 一致性协议及应用解析
  • javascript面向对象之创建对象
  • JAVA多线程机制解析-volatilesynchronized
  • Logstash 参考指南(目录)
  • NSTimer学习笔记
  • PHP 的 SAPI 是个什么东西
  • TypeScript实现数据结构(一)栈,队列,链表
  • webpack入门学习手记(二)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 给github项目添加CI badge
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊一聊前端的监控
  • 一个SAP顾问在美国的这些年
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # include “ “ 和 # include < >两者的区别
  • # 计算机视觉入门
  • #pragma once与条件编译
  • ${factoryList }后面有空格不影响
  • (C#)获取字符编码的类
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (初研) Sentence-embedding fine-tune notebook
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (五)Python 垃圾回收机制
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Sublime Text3配置Lua运行环境
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .cn根服务器被攻击之后
  • .Net 访问电子邮箱-LumiSoft.Net,好用