0

我知道有关 Android 导航的 Android 开发者文章:

https://developer.android.com/guide/navigation/navigation-pass-data

https://developer.android.com/guide/navigation/navigation-getting-started

这两篇文章都没有描述如何在源片段中设置 NavGraph.xml 中定义的参数的值以及如何在目标片段中检索它们?你能给我一个提示吗?

我也知道 Navigation.createOnClickListener(int ID, Bundle args) 方法将 OnClickListener 设置为按钮以导航到不同的目的地。但是包 args 与我在 NavGraph.xml 中定义的参数类型不同。不是吗?

4

1 回答 1

0

首先,您需要将这样的参数添加到您的 navgraph.xml

<fragment
    android:id="@+id/score_destination"
    android:name="com.example.android.guesstheword.screens.score.ScoreFragment"
    android:label="destination_fragment"
    tools:layout="@layout/destination_fragment">
    <action
        android:id="@+id/action_restart"
        app:destination="@+id/game_destination"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_lef />
    <argument
        android:name="score"
        android:defaultValue="0"
        app:argType="integer" />
</fragment>

然后,您必须像这样从源片段发送参数:

findNavController(this).navigate(SourceFragmentDirections.actionSourceToDestination(argument))

最后,您可以从目标片段中检索参数:

DestinationFragmentArgs.fromBundle(arguments!!).score

在上面的示例中,我发送了一个 int 类型的参数名称分数。你可以像这样发送任何类型的论点。如果您的参数不是原始类型,您还可以通过创建 Parcelable 模型类来发送该参数。

我很乐意为您提供任何其他信息。谢谢 :)

于 2019-06-13T13:44:37.160 回答