本文主要是介绍【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)
这篇关于【Android】Navigation动态设置Graph和Launch参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!