Android:导航组件中操作id和片段id之间的差异

Android:导航组件中操作id和片段id之间的差异,android,navigation-architecture,Android,Navigation Architecture,我有个问题困扰了我很长时间 在导航组件中,当使用.navigate(intresid)时,传递操作id和片段id有什么区别 例如: <fragment android:id="@+id/loginFragment" android:name="com.example.myapp.ui.main.LoginFragment" android:label="@string/login" tools:layout="@layout/fr

我有个问题困扰了我很长时间

在导航组件中,当使用.navigate(intresid)时,传递操作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) 使用.导航(R.id.action\u login\u到\u emaillogin片段)

2) 使用.导航(R.id.emailLoginFragment)


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

操作上的所有其他属性,即
popeneranim
popExitAnim
poputo
,和
poputpinclusive
是使用该操作id时自动应用的对象的一部分


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

,您一次只能问一个问题,但要回答第二个问题:后台堆栈上的任何片段都会自动保存和恢复其状态(与设备旋转并进行配置更改等时相同)。