gpt4 book ai didi

android - 在 Jetpack Compose 中使用 NavHostFragment

转载 作者:行者123 更新时间:2023-12-05 00:13:15 26 4
gpt4 key购买 nike

我们有一个旧版应用程序,我们开始迁移到 Jetpack Compose。
该应用程序只有一个 Activity ,使用带有导航 XML 图的导航组件在 fragment 之间导航。
我们正在遵循这种方法:

  • 一次迁移一个 fragment
  • 为每个 fragment 制作一个@Composable 屏幕,提供与 fragment
  • 相同的UI
  • 从 fragment onCreateView() 将内容设置为新创建的屏幕

  • 现在,假设我们有 Fragment1 包含一些导航到 Fragment2 的操作。在原始代码中,我们将在 Fragment1 中调用以下代码:
    NavHostFragment.findNavController(this).navigate(directionToFragment2)
    当创建一个可组合来替换 Fragment1 UI 时,我们如何实现从这个可组合到 Fragment2 的导航?
    在可组合中,我们可以调用:
    val navController = rememberNavController()
    但这似乎是与 fragment 使用的导航 Controller 不同的导航 Controller 。
    有没有办法从可组合访问与 fragment 使用的导航 Controller 相同的导航 Controller ?
    我们目前看到的唯一替代方法是将 Fragment 的导航 Controller 作为参数传递给可组合对象,但它看起来不太正确。

    最佳答案

    你是对的,你不能使用 rememberNavController() - 这将创建一个全新的嵌套 NavController仅适用于可组合的目的地。
    根据 testing guide ,强烈建议避免直接引用任何 NavController在您的任何可组合项本身内(即 HomeScreen 可组合项)。相反,建议传递一个 lambda,当您的可组合组件想要导航时,它可以触发。
    然后,您的 fragment (在您的 setContent 上调用 ComposeView 的 fragment )将负责实现该 lambda 并调用 NavHostFragment.findNavController(this).navigate(directionToFragment2) .
    作为(不太推荐的)替代方案,您还可以使用 LocalView.current.findNavController()随着 fragment 填充 NavController在 View 级别以及 LocalView指向ComposeView托管您的可组合。

    关于android - 在 Jetpack Compose 中使用 NavHostFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67184520/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com