在backstack中多次阻止相同的片段

时间:2016-12-22 23:12:06

标签: android android-activity fragment

嗨,大家好,我的代码是

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添加到backstack中。在HomeFragment和OtherFragment之间切换一段时间并在HomeFragment上单击后退按钮后,我最终会多次显示HomeFragment。 在HomeFragment中有一个回收者视图。当我向上和向下滚动时,我真的可以看到行多次显示。 如何确保HomeFragment仅添加到backstack一次。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用

轻松检查您的片段
YourFragment.isAdded

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

答案 1 :(得分:0)

当您单击主菜单项时,尝试查看Backstack中是否有任何片段。如果是,请调用popBackStack()或替换片段,否则请执行此操作。使用此代码:

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); }