[英]Use NavHostFragment in Jetpack Compose
我们有一个旧版应用程序,我们开始迁移到 Jetpack Compose。 该应用程序只有一个活动,使用带有导航 XML 图的导航组件在片段之间导航。
我们正在遵循这种方法:
现在,假设我们有 Fragment1 包含一些导航到 Fragment2 的操作。 在原始代码中,我们将在 Fragment1 中调用以下代码:
NavHostFragment.findNavController(this).navigate(directionToFragment2)
当创建一个可组合来替换 Fragment1 UI 时,我们如何实现从这个可组合到 Fragment2 的导航? 在可组合中,我们可以调用:
val navController = rememberNavController()
但这似乎是与片段使用的导航不同的导航 controller。 有没有办法从可组合访问与片段使用的导航相同的导航 controller?
我们目前看到的唯一替代方法是将 Fragment 的导航 controller 作为参数传递给可组合对象,但它看起来不太正确。
您是正确的,您不能使用rememberNavController()
- 这将创建一个全新的嵌套NavController
仅适用于可组合目的地。
根据测试指南,强烈建议避免在您的任何可组合组件(即HomeScreen
可组合组件)中直接引用任何NavController
。 相反,建议传入一个 lambda ,您的可组合组件可以在它想要导航时触发。
然后,您的 Fragment(在ComposeView
上调用setContent
的那个)将负责实现该 lambda 并调用NavHostFragment.findNavController(this).navigate(directionToFragment2)
。
作为一种(不太推荐的)替代方法,您还可以使用LocalView.current.findNavController()
作为 Fragments 在视图级别填充NavController
并且LocalView
指向托管您的 Composable 的ComposeView
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.