Android导航组件清除堆栈

时间:2020-03-18 12:07:44

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

我已经从连接到NavController的导航抽屉导航到 DialogFragment 。但是,当我导航到设置了popUpTo和Dialog片段的另一个目标时,它不会清除堆栈。如何清除堆栈?

AM从LogoutDialog调用此方法

findNavController().navigate(R.id.action_logoutDialog_to_auth_navigation)

我只使用片段,只有一项活动。

这是我的导航图的一部分

 <fragment
        android:id="@+id/homeFragment"
        android:name="io.ui.home.HomeFragment"
        tools:layout="@layout/fragment_home" >
        <action
            android:id="@+id/action_homeFragment_to_auth_navigation"
            app:destination="@id/auth_navigation"
            app:popUpTo="@id/homeFragment"
            app:popUpToInclusive="true" />
        <argument
            android:name="fromLogin"
            app:argType="boolean"
            android:defaultValue="false" />
    </fragment>

    <dialog
        android:id="@+id/logoutDialog"
        android:name="io.ui.dialog.LogoutDialog"
        android:label="LogoutDialog" >
        <action
            android:id="@+id/action_logoutDialog_to_auth_navigation"
            app:destination="@id/auth_navigation"
            app:popUpTo="@id/logoutDialog"
            app:popUpToInclusive="true" />
    </dialog>

    <!-- auth navigation graph -->
    <navigation
        android:id="@+id/auth_navigation"
        app:startDestination="@id/loginFragment">
        <fragment
            android:id="@+id/loginFragment"
            android:name="io.ui.login.LoginFragment"
            android:label="fragment_login"
            tools:layout="@layout/fragment_login">
            <action
                android:id="@+id/action_loginFragment_to_OTPFragment"
                app:destination="@id/OTPFragment"
                app:popUpTo="@id/loginFragment"
                app:popUpToInclusive="true" />
            <action
                android:id="@+id/action_loginFragment_to_homeFragment"
                app:destination="@id/homeFragment" />
            <action
                android:id="@+id/action_loginFragment_to_resetPasswordFragment"
                app:destination="@id/resetPasswordFragment" />
        </fragment>

        <fragment
            android:id="@+id/OTPFragment"
            android:name="io.ui.login.OTPFragment"
            android:label="fragment_otp"
            tools:layout="@layout/fragment_otp">
            <action
                android:id="@+id/action_OTPFragment_to_homeFragment"
                app:destination="@id/homeFragment"
                app:popUpTo="@id/OTPFragment"
                app:popUpToInclusive="true" />
            <action
                android:id="@+id/action_OTPFragment_to_loginFragment"
                app:destination="@id/loginFragment"
                app:popUpTo="@id/OTPFragment"
                app:popUpToInclusive="true" />
        </fragment>
        <fragment
            android:id="@+id/resetPasswordFragment"
            android:name="io.ui.profile.PasswordFragment"
            android:label="fragment_reset_password"
            tools:layout="@layout/fragment_password" >
            <argument
                android:name="isReset"
                app:argType="boolean"
                android:defaultValue="false" />
        </fragment>

    </navigation>

1 个答案:

答案 0 :(得分:1)

您正在寻找可用于操作的这些属性。

  • 操作的popUpTo属性在导航之前将后堆栈“弹出”到给定的目的地。 (从后堆栈中删除了目的地。)

  • 如果popUpToInclusive属性为false或未设置,则popUpTo会删除直到指定目标的目标,但会将指定目标留在堆栈中。

  • 如果popUpToInclusive设置为true,则popUpTo属性将从后堆栈中删除所有给定目标,包括给定目标。

  • 如果popUpToInclusive为true并且popUpTo设置为应用程序的起始位置,则该操作将从后退堆栈中删除所有应用程序目标。 “后退”按钮将用户带出应用程序。