将参数安全地传递给带有导航组件的嵌套图

问题描述 投票:0回答:1

我正在使用Android Jetpack导航组件。我有一个带有ID的嵌套导航图,例如R.id.nested_graph嵌套图的第一个Fragment接收一个参数。

<navigation
        android:id="@+id/nested_graph"
        android:label="Nested Graph"
        app:startDestination="@id/firstFragment">
        <fragment
            android:id="@+id/firstFragment"
            android:name="...."
            android:label="....">
            <argument
                android:name="item_id"
                app:argType="integer" />
        </fragment>
        [...]
    </navigation>

如何将参数传递给嵌套图使用安全参数]?] >>

目前,我需要使用直接接收嵌套图ID的API在捆绑包中手动传递参数:

        val args = Bundle()
        args.putInt("item_id", itemId)
        navController.navigate(R.id.nested_graph, args)

我想使用安全的参数,并执行类似的操作:

        val directions = OrigininFragmentDirections.nestedGraph(itemId)
        navController.navigate(directions)

但是尝试这样做时,在构建时出现以下错误:

Too many arguments for public final fun nestedGraph(): NavDirections defined 

问题是导航图预处理正在生成工厂方法来创建NavDirections对象

签名中的必需参数。

嵌套图的声明看起来像这样:

我正在使用Android Jetpack导航组件。我有一个带有id的嵌套导航图,例如R.id.nested_graph嵌套图的第一个片段接收一个参数。

android android-navigation android-jetpack-navigation android-navigation-graph
1个回答
1
投票

经过一些反复试验(我认为Google并没有正式记录它,或者至少我找不到它),我发现可以安全地导航到嵌套的导航图并传递参数:

您需要将第一个片段期望的argument XML对象添加到嵌套片段本身的根中。

© www.soinside.com 2019 - 2024. All rights reserved.