首页 > 解决方案 > 导航架构组件 - 将参数数据传递给 startDestination

问题描述

我有一个活动 A 启动活动 B 传递给它一些意图数据。活动 B 托管来自新导航架构组件的导航图。我想将该意图数据作为参数传递给 startDestination 片段,该怎么做?

标签: androidnavigationandroid-architecture-componentsandroid-architecture-navigation

解决方案


TLDR:您必须手动扩充图表,将键/值添加到 defaultArgs,然后将图表设置在navController.

步骤1

该文档告诉您在您的布局中的<fragment>标签中设置图形。Activity就像是:

<fragment
    android:id="@+id/navFragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    app:graph="@navigation/nav_whatever"
    app:defaultNavHost="true"
    />

删除设置graph=.

第2步

在将显示您的 Activity 中,NavHostFragment像这样膨胀图表:

val navHostFragment = navFragment as NavHostFragment
val inflater = navHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.nav_whatever)

navFragment如上所述,您在 XML 中为片段提供的 id在哪里。

第 3 步 [关键!]

创建一个包来保存要传递给startDestination片段的参数并将其添加到图形的默认参数中:

val bundle = Bundle()
// ...add keys and values
graph.addDefaultArguments(bundle)

第4步

在主机上设置图表navController

navHostFragment.navController.graph = graph

推荐阅读