4

使用 Android 导航组件。我有两个导航图(每个都有自己的流程),比如说导航图 A 和 B。我成功地从 A 导航到 B,但我无法将图 A 中包含的最后一个 Fragment 的参数传递给属于图 B 的起始 Fragment。

我能够在属于同一图的片段之间传递参数,但是在导航图之间导航时不会生成设置参数的函数。

我正在尝试使用 safeargs 来实现这一点。

这是导航图代码:

导航图 A:

<navigation android:id="@+id/nav_graph_a"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:startDestination="@id/fragment1">

<fragment
    android:id="@+id/fragment1"
    android:name="com.mypackage.fragments.Fragment1"
    android:label="Fragment1">
    <action
        android:id="@+id/action_fragment1_to_fragment2"
        app:destination="@id/fragment2"/>

</fragment>

<fragment
    android:id="@+id/fragment2"
    android:name="com.mypackage.fragments.Fragment2"
    android:label="Fragment2">
    <argument
        android:name="thisArgumentAlwaysArrive"
        android:defaultValue="null"
        app:argType="string"/>
    <action
        android:id="@+id/action_fragment2_to_nav_graph_b"
        app:destination="@id/nav_graph_b"/>
</fragment>

<include app:graph="@navigation/nav_graph_b"/>

导航图 B:

<navigation android:id="@+id/nav_graph_b"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:startDestination="@id/fragment3">

<fragment
    android:id="@+id/fragment3"
    android:name="com.mypackage.fragments.Fragment3"
    android:label="Fragment3">

    <argument
        android:name="thisArgumentNeverArrive"
        app:argType="string"/>
</fragment>

关于如何做到这一点的任何想法?

4

1 回答 1

0

Safe Args 是 Gradle 的插件,它为目的地创建类 ClassArgs。默认控制器提供了一种导航到另一个 NavGraph 的方法,在这种情况下,有一个名为 NavGraphNavigator 的 Navigator 实现。此导航器为您提供了一个navigate(NavGraph destination,Bundle args)将参数传递给起始片段的函数。

所以,我发现做你想要实现的最好的方法是使用生成的类来生成一个包含所需参数的包。

var myBundle = YourFragmentIdInNavGraphArgs.Builder(var args..).toBundle()

然后使用默认的 NavController 导航到这样的 navGraph 目的地。

view.findNavController().navigate(R.id.your_action_to_nav_graph_id,myBundle)

Navigator 的实现将负责将参数传递给目标上的起始片段。

希望它对某人有所帮助。

于 2019-09-25T21:28:38.580 回答