我有一个带有登录流程的应用程序和所有这些应用程序的几个 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/