将Fragment替换为自身时,后退按钮的正确行为应该是什么

时间:2013-11-12 19:25:34

标签: android android-fragments

我有3个碎片(主要,关于和帮助) 我有一个菜单有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个或更多不同的片段,它就可以了。

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

让我更好地解释一下。

  1. 点击“显示片段”
  2. 将AboutFragment添加到MainLayout
  3. AboutFragment显示在屏幕上
  4. 点击“显示主要片段”
  5. MainFragment已添加到MainLayout
  6. MainFragment显示在屏幕上
  7. 点击“显示主要片段”(再次)
  8. MainFragment已添加到MainLayout(再次)
  9. MainFragment显示在屏幕上(再次)
  10. 点击后退按钮
  11. MainFragment显示在屏幕上!!
  12. 当我点击后退按钮(步骤10)时,我想显示AboutFragment。 但它再次向我展示了MainFragment。这是对的吗?或者我做错了什么? 我需要在之前进行一次popBackStack()调用吗?

    谢谢,对不起我的英文

1 个答案:

答案 0 :(得分:0)

按照您的步骤添加MainFragment两次,所以当您在步骤10中点击后退按钮后再次显示时,后备堆中还有另一个MainFragment

如果您不想再次显示MainFragment,请不要再次将ManiFragment添加到Backstack,然后您将返回AboutFragment