gpt4 book ai didi

java - 清除除顶部 fragment 之外的 fragment Backstack

转载 作者:行者123 更新时间:2023-12-01 18:23:06 25 4
gpt4 key购买 nike

在我的应用程序中,抽屉导航中有一些菜单项。当用户点击这些项目之一并导航到相应的 fragment 时,我希望清除 fragment 后退堆栈,除了他们刚刚导航到的 fragment 。让我举例说明:

在我的抽屉导航中,用户可以选择打开 fragment F1、F2、F3、F4、F5、F6。首次打开应用程序时,用户按 F1 启动。假设从 F1 开始,用户使用 fragment View 本身内的按钮打开 fragment F7 -> F8 -> F9 -> F10。此时,后台堆栈如下所示:

F1 -> F7 -> F8 -> F9 -> F10

假设从这里,用户打开抽屉导航并选择 F2。我想要发生的是上面的返回堆栈被清除并仅填充 F2,这样用户就无法从 F2 返回到 F10。换句话说,后栈应该变成:

不是这个:F1 -> F7 -> F8 -> F9 -> F10 -> F2
但是这个:F2

我怎样才能做到这一点?

编辑1:我尝试的解决方案之一是在加载 Activity 时向 navigationView 添加一个 OnNavigationItemSelectedListener ,这将在按下其中一项时清除后台堆栈。我的解决方案有效,但在此过程中我覆盖了实际更改为新 fragment 的默认代码。我窥探了 Android API 并发现了这个:

navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
boolean handled = onNavDestinationSelected(item, navController);
if (handled) {
ViewParent parent = navigationView.getParent();
if (parent instanceof DrawerLayout) {
((DrawerLayout) parent).closeDrawer(navigationView);
} else {
BottomSheetBehavior bottomSheetBehavior =
findBottomSheetBehavior(navigationView);
if (bottomSheetBehavior != null) {
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
}
}
return handled;
}
});

这不是我的代码。这是处理抽屉导航上菜单项选择的 native 代码(位于 NavigationUI 类中)。如果我想添加自己的 OnNavigationItemSelectedListener 我必须重新创建上面显示的功能,但我无法这样做,因为其中的某些方法受到保护。这就是为什么我不相信这个解决方案会起作用。

最佳答案

您可以尝试清除backstack中的 fragment

FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}

关于java - 清除除顶部 fragment 之外的 fragment Backstack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60272198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com