0

请不要将此标记为重复,我已经阅读了这些 SO 问题,但仍然无法 使用导航组件 popUpTo 错误 Android 导航组件 popUpTo 行为 Android Navigation Component + Login Flow + Nested BottomNavigationView

我在用

def nav_version = "2.2.1"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

场景:这是我的应用图 在此处输入图像描述

这是我的导航代码:

<fragment
        android:id="@+id/splashFragment"
        android:name="com.view.SplashFragment"
        android:label="SplashFragment" >
        <action
            android:id="@+id/action_splashFragment_to_loginFragment"
            app:destination="@id/loginFragment"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popUpTo="@id/loginFragment"
            app:popUpToInclusive="true"/>
        <action
            android:id="@+id/action_splashFragment_to_mainFragment"
            app:destination="@id/mainFragment"
            app:popEnterAnim="@anim/slide_in_left"
            app:popExitAnim="@anim/slide_out_right"
            app:enterAnim="@anim/slide_in_right"
            app:exitAnim="@anim/slide_out_left"
            app:popUpTo="@id/mainFragment"
            app:popUpToInclusive="true"/>
    </fragment>

当我打开时按下后退按钮MainFragment或者LoginFragment我仍然能够导航回splashFragment。我已经有app:popUpToapp:popUpToInclusive标签了。我希望我的应用不要导航回splashFragment

4

1 回答 1

2

你在你的popUpTo

根据popUpTo 指南

app:popUpTo告诉导航库在调用navigate(). 属性值是应保留在堆栈中的最新目的地的 ID。

您还可以包括app:popUpToInclusive="true"指示指定的目标app:popUpTo也应该从后台堆栈中删除。

popUpTo应该指向已经在后堆栈上的目标,您要从后堆栈弹出。因此,如果您想将所有内容弹出到splashFragment您应该使用app:popUpTo="@id/splashFragment". 如果您想弹出所有内容,包括splashFragment那么您应该使用app:popUpTo="@id/splashFragment"and app:popUpToInclusive="true"

<fragment
    android:id="@+id/splashFragment"
    android:name="com.view.SplashFragment"
    android:label="SplashFragment" >
    <action
        android:id="@+id/action_splashFragment_to_loginFragment"
        app:destination="@id/loginFragment"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popUpTo="@id/splashFragment"
        app:popUpToInclusive="true"/>
    <action
        android:id="@+id/action_splashFragment_to_mainFragment"
        app:destination="@id/mainFragment"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popUpTo="@id/splashFragment"
        app:popUpToInclusive="true"/>
</fragment>
于 2020-05-08T16:51:51.873 回答