在后台堆栈中多次防止相同的片段
Posted
技术标签:
【中文标题】在后台堆栈中多次防止相同的片段【英文标题】:prevent same fragment multiple times in backstack 【发布时间】:2017-05-08 15:49:35 【问题描述】:大家好,这是我的代码
navigationView.setNavigationItemSelectedListener(new NavigationView .OnNavigationItemSelectedListener() @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) if (item.isChecked()) //已经选择的项目。没做什么 抽屉布局.closeDrawer(GravityCompat.START); 返回真; 开关(item.getItemId()) 案例 R.id.home: FragmentTransaction 事务 = getSupportFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment, new HomeFragment()) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); 休息; 案例 R.id.other: 事务 = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment, new OtherFragment()) .addToBackStack(null).setTransition(FragmentTransaction .TRANSIT_FRAGMENT_FADE).commit(); 休息; 默认: 休息; 抽屉布局.closeDrawer(GravityCompat.START); 返回真; );我基本上只有 2 个片段,只有 HomeFragment 应该添加到后台堆栈中。在 HomeFragment 和 OtherFragment 之间切换一段时间并在 HomeFragment 上单击后退按钮后,我最终会多次显示 HomeFragment。 在 HomeFragment 中有一个回收视图。当我上下滚动时,我真的可以看到这些行显示了多次。 如何确保 HomeFragment 只添加到 backstack 一次。
谢谢
【问题讨论】:
【参考方案1】:您可以轻松地检查您的片段
YourFragment.isAdded
如果您有多个片段,您可以创建一个新类来管理所有片段并创建状态以检查是否已添加片段。
【讨论】:
【参考方案2】:当你点击 Home 菜单项时,尝试找出 backstack 中是否有任何片段。如果是,请调用 popBackStack() 或像现在一样替换片段。使用此代码:if (getSupportFragmentManager().getBackStackEntryCount() > 0)
getSupportFragmentManager().popBackStack();
【讨论】:
感谢@janzoner 的出色回答。它是一种魅力。我的 recyclerView 并不总是显示数据。有些确实如此,有时它只是空的。奇怪 不客气。我希望你能用你的 RecyclerView 解决这个问题。如果没有,请尝试再次在 *** 上寻求帮助。以上是关于在后台堆栈中多次防止相同的片段的主要内容,如果未能解决你的问题,请参考以下文章