我知道有关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设置为按钮以导航到其他目标。但是bundle args与我在NavGraph.xml中定义的参数类型不同。是不是
答案 0 :(得分: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模型类来发送该参数。
我们很乐意为您提供任何其他信息。谢谢:)