android - 清除导航 Controller 的完整后台堆栈

标签 android navigation android-architecture-components back-stack

我有一个带有登录流程的应用程序和所有这些应用程序的几个 fragment ,我可以访问一个抽屉导航,它可以选择退出应用程序。我不想将每个 fragment 都连接到我的初始屏幕,而是想在注销时将导航重置为初始屏幕。

我的代码是这样的:

private void resetNavController() {
    mNavController.navigate(
            R.id.splashScreenFragment,
            null,
            new NavOptions.Builder().setPopUpTo(R.id.splashScreenFragment, true).build()
    );

它导航回初始屏幕但不会弹出整个后台堆栈。此外,如果我将 true 更改为 false,它不会按预期工作。我需要做什么才能弹出完整的后台堆栈?

最佳答案

在我尝试将 backstack 弹出到我的主图之前,我也一直在努力解决这个问题。

所以,我有一个全局操作:

<action
    android:id="@+id/global_navigate_to_login"
    app:destination="@id/login_navigation_graph"
    app:launchSingleTop="true"
    app:popUpTo="@id/main_navigation_graph"
    app:popUpToInclusive="true">
    <argument
        android:name="startWithLogout"
        android:defaultValue="true"
        app:argType="boolean" />
</action>

该参数只是在授权刷新 token 过期时在用例的登录流程中注销用户的附加逻辑。 “login_navigation_graph”是包含登录流程的嵌套图。 “main_navigation_graph”是应用程序的主图。

为了调用这个全局操作:

supportFragmentManager
    .navController()
    .navigate(R.id.global_navigate_to_login)

整个后台堆栈被清除,用户被重定向到登录目的地。

关于android - 清除导航 Controller 的完整后台堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60138461/

相关文章:

javascript - Wordpress 100% 宽度下拉菜单与 JavaScript

android - AOSP 定制测试套件

php - 如何在android中完成数据同步?

androidx.paging.PagedListAdapter' 已弃用

php - Yii CMenu Widget - 如何获得主页

android - 使用导航组件时将 fragment 设置为全屏 - Android

java - 我想在 ViewModel 类中的 Retrofit 失败时显示 Toast 消息

Android 在调用 ft.replace 时为同一 fragment 返回不同的 ViewModel 实例

java - 如何使用 Amazon Cognito 保护我们自己的网络服务?

android - 忽略 navigate() 调用 : FragmentManager has already saved its state