Android 当用片段本身替换片段时,“后退”按钮的正确行为应该是什么

Android 当用片段本身替换片段时,“后退”按钮的正确行为应该是什么,android,android-fragments,Android,Android Fragments,我有3个片段(Main、About和Help) 我有一个带有3个选项的菜单(“显示主片段”、“显示关于片段”和“显示帮助片段”) 当我选择3个菜单选项之一时,我会: Fragment fragment = null; switch (position) { case 1: fragment = new MainFragment(); break; case 3:

我有3个片段(Main、About和Help) 我有一个带有3个选项的菜单(“显示主片段”、“显示关于片段”和“显示帮助片段”)

当我选择3个菜单选项之一时,我会:

    Fragment fragment = null;

    switch (position) {

        case 1:
            fragment = new MainFragment();
            break;              
        case 3:
            fragment = new HelpFragment();
            break;
        case 4:
            fragment = new AboutFragment();
            break;

        default:
            break;
    }
    FragmentManager fragmentManager = getSupportFragmentManager();

    FragmentTransaction ft = fragmentManager.beginTransaction();

    ft.replace(R.id.content_frame, fragment);

    ft.addToBackStack(null);

    ft.commit();
如果我添加2个、3个或更多不同的片段,它可以正常工作

但是如果我连续添加相同的片段,当我点击后退按钮时,它会显示相同的片段,而不是之前添加的片段

让我解释清楚

  • 单击“显示关于片段”
  • AboutFragment已添加到主布局中
  • 屏幕上显示了关于碎片的信息
  • 单击“显示主片段”
  • MainFragment被添加到MainLayout中
  • 主片段显示在屏幕上
  • 单击“显示主片段”(再次)
  • MainFragment被添加到MainLayout(再次)
  • 主片段显示在屏幕上(再次)
  • 单击后退按钮
  • 主片段显示在屏幕上 当我点击后退按钮(第10步)时,我想显示关于片段。 但它再次向我展示了主要的片段。是这样吗?还是我做错了什么? 我之前需要打个popBackStack()电话吗


    感谢并抱歉我的英语

    按照您的步骤进行,您添加了两次
    main片段
    ,因此在步骤10中点击后退按钮后,它当然会再次显示,在后堆栈中还有另一个
    main片段


    如果您不想再次显示主片段,请不要再次将
    ManiFragment
    添加到backbackback,那么您将返回到
    AboutFragment

    ,因为您总是调用ft.addToBackStack(null);如果你不想把它放在backbackback上,就跳过它吧。你为什么要在backbackback上添加帮助或碎片呢?是的,我想是这样的。我只是想确认一下。我解决了检查前一个片段是否相同的问题,如果是这种情况,我在添加第二个片段之前调用了popBackStack(),因此,如果用户连续添加相同的片段,则正确。谢谢你的回答