【问题标题】:Is the navigation graph obsoleted when I use Jetpack Compose Navigation?使用 Jetpack Compose Navigation 时导航图是否已过时?
【发布时间】:2021-11-03 14:11:05
【问题描述】:

在我的 Android Studio 项目中使用导航图之前,就像 article 所说的那样。

我使用位于 res\navigation 文件夹中的 xml 文件来包含我所有不同的目的地。

目前我正在通过article学习Jetpack Compose Navigation。

代码A来自上篇文章中提到的官方示例project

Jetpack Compose Navigation 好像使用 Code A 和其他代码进行导航,我在res\navigation 文件夹中找不到任何 XML 文件。

1:当我使用 Jetpack Compose Navigation 时,导航图是否已过时?

2:当我使用 Jetpack Compose Navigation 时,是否需要再次使用位于 res\navigation 文件夹中的导航图?

代码 A

@Composable
fun RallyNavHost(navController: NavHostController, modifier: Modifier = Modifier) {
    NavHost(
        navController = navController,
        startDestination = Overview.name,
        modifier = modifier
    ) {
        composable(Overview.name) {
            OverviewBody(
                onClickSeeAllAccounts = { navController.navigate(Accounts.name) },
                onClickSeeAllBills = { navController.navigate(Bills.name) },
                onAccountClick = { name ->
                    navigateToSingleAccount(navController, name)
                },
            )
        }
        composable(Accounts.name) {
            AccountsBody(accounts = UserData.accounts) { name ->
                navigateToSingleAccount(navController = navController, accountName = name)
            }
        }
        composable(Bills.name) {
            BillsBody(bills = UserData.bills)
        }
        ...
    }
}

【问题讨论】:

  • 1.- 如果您仍然在视图系统中使用导航,这并不是严格意义上的弃用,但如果您计划迁移以使用 jetpack compose + 导航,则范式会发生变化,因为现在您需要使用一个 NavHostController 以到达正确的撰写目的地。
  • 2.- 不,您使用 NavHost + NavHostController 来达到正确的可组合功能。
  • 这段代码可能对你有帮助github.com/orbitalsonic/…

标签: android android-jetpack-compose


【解决方案1】:

导航一直有三种构建NavGraph对象的方法:

  1. 手动,通过使用NavGraph 构造函数本身。虽然这是此处列出的所有其他方法的基础,但您并不打算直接使用这些 API。

  2. 通过Navigation XML 构建图表。这是一种在编译时使用 Navigator Editor 工具和Safe Args plugin 构建图形的方法。此方法仅支持带有 Fragments 的导航。

  3. 使用Navigation Kotlin DSL。这提供了一种在运行时使用Kotlin DSL 以编程方式构建导航图的类型安全方式。此方法同时支持 Navigation with Fragments 和 Navigation Compose。

由于 Compose 是一种以编程方式构建 UI 的方式,因此 Navigation 仅支持构建图形的编程版本 - 通过 Kotlin DSL,这正是 NavHost 的尾随 lambda 为您提供的:它与 NavGraphBuilder 相同范围允许您调用 navigation(...) {} 来构建 nested graphcomposable 以向图表添加新目标。

所有概念都是相同的,因为无论您如何实际构建图表,您构建的底层 NavGraph 在运行时最终都是完全相同的一组对象。

【讨论】:

  • 谢谢!你的意思是 Code A 使用第三种方式(Using the Navigation Kotlin DSL.)来构建一个 NavGraph 对象?
  • 正确,代码 A 正在使用 Kotlin DSL(根据我的回答,这是为 Navigation Compose 构建导航图的唯一支持方式)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多