当前位置: 首页 > 知识库问答 >
问题:

防止在后堆栈中多次出现相同片段

仲孙磊
2023-03-14

嗨,伙计们,这是我的密码

navigationView.setNavigationItemSelectedListener(new NavigationView
                .OnNavigationItemSelectedListener() {
            @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                if (item.isChecked()) {
                    //item already selected. Do nothing
                    drawerLayout.closeDrawer(GravityCompat.START);
                    return true;
                }
                switch (item.getItemId()) {
                    case R.id.home:
                        FragmentTransaction transaction = getSupportFragmentManager()
                                .beginTransaction();
                        transaction.replace(R.id.fragment, new HomeFragment())
                                .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit();
                        break;
                    case R.id.other:
                        transaction = getSupportFragmentManager().beginTransaction();
                        transaction.replace(R.id.fragment, new OtherFragment())
                                .addToBackStack(null).setTransition(FragmentTransaction
                                .TRANSIT_FRAGMENT_FADE).commit();
                        break;
                    default:
                        break;
                }
                drawerLayout.closeDrawer(GravityCompat.START);
                return true;
            }
        });

我基本上只有2个碎片,只有家庭装饰应该添加到背面堆叠。在HomeFragment和OtherFragment之间切换了一段时间,然后在HomeFragment上单击back按钮,最后我会看到HomeFragment显示了好几次。在家庭框架内有一个回收视图。当我上下滚动时,我真的可以看到行显示了多次。我如何才能确保家庭装饰只添加到一次后堆栈。

谢谢

共有2个答案

蒋默
2023-03-14

您可以轻松地使用

YourFragment.isAdded

如果有多个片段,可以创建一个新的类来管理所有的片段,并创建状态来检查是否添加了片段。

壤驷凯
2023-03-14

当你点击Home菜单项时,试着找出是否有任何片段在后堆栈中。如果是,则调用popBackStack()或替换一个片段,就像现在所做的那样。使用此代码:if(getSupportFragmentManager().GetBackStackEntryCount()>0){getSupportFragmentManager().PopBackStack();}

 类似资料:
  • 我有一个带有三个Fragments的,让我们称它们为A、B和C。A在活动中调用。 并在按下某些按钮时被替换为片段B或C,并且FragmentTransaction调用。 但是,假设我连续三次调用片段B,我如何防止它自己堆积到它身上呢?同时我希望这是可能的:B呼叫

  • 我想在这个导航用例中避免这种情况:A- 其中所有片段实例都保存在后栈中。原因:避免内存溢出错误。 我尝试创建一个自己的导航工作流,如下所述:https://stackoverflow.com/questions/18041583/fragments-backstack-issue?noredirect=1#comment26393904_18041583(它应该模仿活动行为,在开始一个新操作后调用

  • 问题是: 我有一个带有2个片段的活动:片段1和片段2。 点击一个项目后,从我的回收站视图我调用Fragment2与以下行: 当用户关闭Fragment2(BackButton或关闭按钮)时,Fragment1再次出现在屏幕上。 我需要的是: 当Fragment1实例再次出现在屏幕中时,调用的事件是哪个? 在修改了片段的以下生命周期之后,我认为可能是onCreateView()或onResume()

  • Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

  • 我需要一些帮助。em以这种方式向活动添加片段。问题是每次调用openFragment时,它都会创建片段并添加。这是显而易见的。问:我做了什么修改,所以它只能添加一次片段。在下一次使用相同的片段标记调用时,它不会执行任何操作。 案例:第一次按下按钮添加片段并显示。我再按一次同样的按钮,它没有反应。

  • 问题内容: 当用户单击登录或注册按钮时,我试图阻止多个请求。这是我的代码,但是不起作用。只是第一次工作正常,然后返回false。 有任何想法吗?谢谢! 问题答案: 问题在这里: 不再指向按钮。