Android离开底部导航栏项目时清除返回栈

9
我正在使用最新的导航库(版本2.4.0),其中包含带有底部导航视图的多个后退堆栈。
默认行为是当用户返回选项卡时,会保存每个后退堆栈。我想在用户离开选项卡时清除后退堆栈。
基于此底部导航与3个选项卡:
从Tab1开始,如果用户: - 前往ScreenA2 - 单击Tab2(显示ScreenB1) - 返回Tab1 - 这里我要的是ScreenA1而不是ScreenA2(导航库的默认行为)
谢谢
4个回答

6

您可以关闭选项卡的多个返回堆栈,就像在 lib 版本 2.4 之前那样。为此,您需要更改:

navView.setupWithNavController(navController) 

to

NavigationUI.setupWithNavController(navView, navController, false) 

解决了我数十年的痛苦。不确定为什么这不是最佳答案。 - Makari Kevin

0
在您的导航文件中,对导航至ScreenA2的操作添加这些属性app:popUpToapp:popUpToInclusive
<action
    android:id="@+id/action_A1_to_A2"
    app:destination="@id/A2"
    app:popUpTo="@+id/A1"
    app:popUpToInclusive="true"/>

欲了解更多信息,请查看以下链接: 弹出示例:循环逻辑


谢谢,这个解决方案的问题是如果我按返回键,我会失去片段(而我不想要它)。 - Pierre

0

在调用导航到TAB1的方法之前,请尝试调用以下内容。

navController.popBackStack(R.id.ScreenA1, false);

我在类似于您的情况下使用了这种方法,它对我很有效。


3
好的,我会尽力进行翻译并保持原意不变。请提供需要翻译的内容。 - Yunnosch
请注意,使用其他选项来规避您的帐户限制是不允许的。您将在获得50个声望后解锁评论选项。 - tacoshy
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;而是,提供不需要询问者澄清的答案。- 来自审核 - Junaid Khalid

-1

我刚刚完成了onNavigationItemSelected监听器

  1. 你的 navigation.xml 和 menu.xml 中的 id 应该不同

  2. 当你处理特定项目的点击操作时,请尝试以下代码:

             R.id.home_bottom_item -> {navController.popBackStack();
             navController.navigate(R.id.home_bottom_item)
         }
    

谢谢,但这个不起作用。 - Pierre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接