如何删除除第一个之外的所有片段?

时间:2017-01-05 09:23:45

标签: android android-fragments android-menu android-navigationview appcompatactivity

我的应用程序包含带有少量菜单项的NavigationView的AppBaseActivity。默认情况下,我加载Home片段&点击抽屉中的每个菜单项,我打开特定的片段。

我的问题是,如果用户点击后退按钮,我需要一直显示Home片段。

逐步解释:

  1. 在活动启动时,默认情况下加载主页片段
  2. 假设选择菜单项1,加载相关片段[* 4]
  3. 假设选择菜单项2,加载相关片段[* 4]
  4. 我想让堆栈清晰但是,保持Home片段持久,以便如果用户按下后退按钮而不是从抽屉中选择菜单项或者只是转到任何片段&在杀死它时,应该导航回Home片段。
  5. 在我目前的情况下,它只是关闭/终止我的应用程序。

    AppBaseActivity Java(代码的某些部分)

        onCreate() {
        fragmentTransaction = fragmentManager.beginTransaction();
                HomeFragment homeFragment = new HomeFragment();
                fragmentTransaction.add(R.id.body_container, homeFragment, getResources().getString(R.string.app_name));
                fragmentTransaction.commit();
        }
    
        @SuppressWarnings("StatementWithEmptyBody")
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
            navigationView.getMenu().findItem(item.getItemId()).setChecked(true);
    
            switch (item.getItemId()) {
    
                case R.id.nav_terms :
                    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    fragmentTransaction = fragmentManager.beginTransaction();
                    TCFragment tcFragment = new TCFragment();
                    fragmentTransaction.add(R.id.body_container, tcFragment, getResources().getString(R.string.tc_screen_name));
                    fragmentTransaction.commit();
                    break;
    
                case R.id.nav_about_us :
                    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
                    fragmentTransaction = fragmentManager.beginTransaction();
                    AboutUsFragment aboutUsFragment = new AboutUsFragment();
                    fragmentTransaction.add(R.id.body_container, aboutUsFragment, getResources().getString(R.string.about_us_screen_name));
                    fragmentTransaction.commit();
                    break;
            }
    
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
    

2 个答案:

答案 0 :(得分:0)

尝试在提交前添加带有home片段的这一行:

fragmentTransaction addTobackStack(null);

答案 1 :(得分:0)

您需要使用addToBackStack()将事务添加到Backstack。背压将自动弹出背斜堆中的最顶层碎片。

参考 https://developer.android.com/guide/components/fragments.html

相关部分为“执行碎片交易”