【问题标题】:Android Navigation Component clear stackAndroid导航组件清栈
【发布时间】:2020-03-18 12:07:44
【问题描述】:

我已从连接到 NavController 的 导航抽屉 导航到 DialogFragment。但是当我导航到另一个我设置了 popUpTo 和 Inclusive of 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>

【问题讨论】:

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


    【解决方案1】:

    您正在寻找这些属性来执行您的操作。

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

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

    • 如果 popUpToInclusive 设置为 true,popUpTo 属性会从后台堆栈中删除所有目的地,包括给定目的地。

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


    编辑:我还添加了这个非常棒的视频,它用示例 https://www.youtube.com/watch?v=mLfWvSGG5c8 进行了解释

    【讨论】:

    • 我已将 popUpTo 设置为 layoutDialog 并将 popUpToInclusive 设置为 true,但是当我从对话框片段导航时,它不会清除堆栈
    • 您能否添加您的 nav_graph 以及如何处理它?
    • 我已经添加了导航图
    • 你能尝试用app:popUpTo="@id/nav_graph"弹出整个图表吗?
    • @Biscuit 感谢app:popUpTo="@id/nav_graph"。当您需要在会话过期时重定向到登录片段并完全清除后台堆栈时,这是一个非常好的解决方案
    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2015-04-13
    相关资源
    最近更新 更多