我有一个带有 LogIn 流程的应用程序和所有这些中的几个片段,我可以访问一个导航抽屉,该抽屉可以选择注销该应用程序。我想在注销时将导航重置为初始屏幕,而不是将每个片段连接到我的初始屏幕。
我的代码如下所示:
private void resetNavController() {
mNavController.navigate(
R.id.splashScreenFragment,
null,
new NavOptions.Builder().setPopUpTo(R.id.splashScreenFragment, true).build()
);
它会导航回初始屏幕,但不会弹出整个后退堆栈。此外,如果我将 true 更改为 false,它将无法按预期工作。我必须做什么才能弹出完整的后退堆栈?
我也在为此苦苦挣扎,直到我试图将后备堆栈弹出到我的主图形中。
所以,我有一个全球行动:
<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)
清除整个后退堆栈,并将用户重定向到登录目标。