Android:导航组件中的动作ID和片段ID之间的区别

时间:2019-09-07 02:57:31

标签: android navigation-architecture

我有一个困扰我很久的问题,

在导航组件中,使用.navigate(int resId)时,传递操作ID与片段ID的区别是什么?

示例:

<fragment android:id="@+id/loginFragment"
          android:name="com.example.myapp.ui.main.LoginFragment"
          android:label="@string/login"
          tools:layout="@layout/fragment_login" >

    <action
        android:id="@+id/action_login_to_emailLoginFragment"
        app:destination="@id/emailLoginFragment"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_right"
        app:popUpTo="@+id/emailLoginFragment"
        app:popUpToInclusive="true"/>

</fragment>

<fragment android:id="@+id/emailLoginFragment"
          android:name="com.example.myapp.ui.main.EmailLoginFragment"
          android:label="EmailLoginFragment"
          tools:layout="@layout/fragment_login_email" />

在上述情况下,如果

1)使用.navigate(R.id.action_login_to_emailLoginFragment);

2)使用.navigate(R.id.emailLoginFragment);

我还有一个查询,我知道.navigate(int resId)将替换该片段,在这种情况下,如何保留先前片段中的视图状态?

1 个答案:

答案 0 :(得分:1)

动作上的所有其他属性-即popEnterAnimpopExitAnimpopUpTopopUpToInclusiveNavOptions对象的一部分,当您使用该操作ID时,该操作会自动应用。

因此,当您使用navigate(R.id.emailLoginFragment)时,不会应用其他任何字段:您不会从后栈弹出任何内容,也不会应用任何动画。要复制操作提供的内容,您需要使用navigate(int, Bundle, NavOptions) method,手动构造正确的NavOptions