【问题标题】:Clear complete back stack of navigation controller清除导航控制器的完整回栈
【发布时间】:2020-02-09 15:55:32
【问题描述】:

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

我的代码如下所示:

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

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

【问题讨论】:

  • 我认为最简单的方法是不使用导航组件,但如果您找到答案,请通知我们:)
  • 真的吗?没有人用真正的答案回答这个问题吗?我期待更多的东西。如果这仍然是一个问题,我可以在某个时候进行调查。
  • 它仍然在待办事项列表中。还没看呢

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


【解决方案1】:

我也一直在努力解决这个问题,直到我尝试将 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>

该参数只是在身份验证刷新令牌过期时在用例中注销用户在登录流程中的附加逻辑。 “login_navigation_graph”是一个包含登录流程的嵌套图。而“main_navigation_graph”是应用的主图。

用于调用此全局操作:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多