当前位置: 首页 > 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)

http://www.mrgr.cn/news/11250.html

相关文章:

  • 广播语义学许多PyTorch操作支持NumPy的广播语义。python编程 人工智能 神经网络
  • 【Tools】Prompt 的概念介绍
  • 探索商品详情API中的重量与体积信息:解锁精准物流管理与用户购物体验的秘密
  • 在VB.net中,LINQ有什么查询表达式,举例说明
  • 深度学习系列71:表格检测和识别
  • 探索Git:分布式版本控制系统的力量(二)
  • java 使用 aws s3 sdk 通过分段下载来实现 html 页面 video 的断点播放、拖动进度播放
  • nginx的代理服务器
  • docker数据卷及数据卷容器
  • NoSql数据库Redis集群
  • vue2的el-select虚拟下拉
  • 【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现
  • Excel vba listbox 鼠标滚轮滚动
  • Eureka的生命周期管理:服务注册、续约与下线的完整流程解析
  • 【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondBlank.cs
  • 电动汽车电池监测平台系统设计(论文+源码+图纸)
  • Cypress 调用后端能力 task
  • JavaScript计算问题
  • “曹德旺胞妹”正力新能:市占率偏低巨亏近28亿,受客户影响较大
  • 《AI办公类工具PPT系列之四——ChatPPT》