在Jetpack导航中,如何知道哪个动作触发了我的片段

时间:2020-09-20 04:10:18

标签: android android-jetpack android-jetpack-navigation

使用Jetpack导航时,我有片段A-> B-> C-> B,对于片段B的onCreate,如何检查B来自A还是来自C。

1 个答案:

答案 0 :(得分:1)

您必须传递一些来自A-> B或C-> B的数据。

作为示例,您可以根据需要发送整数值,字符串或任何其他值。我以整数为例

<fragment
android:id="@+id/flow_step_one_dest"
android:name="com.example.android.codelabs.navigation.FlowStepFragment"
tools:layout="@layout/flow_step_one_fragment">
<argument
    android:name="flowStepNumber"
    app:argType="integer"
    android:defaultValue="1"/>

<action...>
</action>

以及片段A和C,您可以像这样传递值

val flowStepNumberArg = 1
val action = FragmentADirections.nextAction(flowStepNumberArg) //For Fragment A
//val action = FragmentCDirections.nextAction(flowStepNumberArg) //For Fragment C
findNavController().navigate(action)

在片段B内,您可以通过以下方式进行检索:

val safeArgs: FlowStepFragmentArgs by navArgs()
val flowStepNumber = safeArgs.flowStepNumber

如果您尚未添加safeArgs的依赖项,则可以将其添加到项目级别的build.gradle

dependencies {
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
//...
}

在应用程序级别的build.gradle顶部添加此行

apply plugin: 'androidx.navigation.safeargs.kotlin'

如果您需要更多的知识而不是查看Google's Codelab