将片段添加到已经在其中的backstack

时间:2014-05-04 16:44:18

标签: android android-fragments back-stack

如果向BackStack添加已经在其中的片段,会发生什么? 例如:

Fragment one = new Fragment();
Fragment two = new Fragment();

getSupportFragmentManager().beginTransaction().add(R.id.viewGroup, one).addToBackStack(null).commit();
//...
getSupportFragmentManager().beginTransaction().replace(R.id.viewGroup, two).addToBackStack(null).commit();
//...
getSupportFragmentManager().beginTransaction().replace(R.id.viewGroup, one).addToBackStack(null).commit();

当我再次添加片段"一个"时,对它的两个引用是在堆栈内部还是只有最新的?

1 个答案:

答案 0 :(得分:1)

即使instance of the fragment相同,当已存在BackStack再次添加到Fragment时,BackStack条目也会增加。

添加First Fragment时,后台条目将为one

当您替换Second Fragment时,后台条目将为two

当您替换First Fragment时(即使First Fragment instance相同),older (first) Fragment instance将为reused。但是BackStack entry will be three

现在堆栈看起来像这样

`First Fragment` -> `Second Fragment` -> `First Fragment`

所以当Back pressed Fragments被弹出Fist Fragment , then Second Fragment and then again First Fragment时。

这是addBackStackState

中的FragmentManager方法
 void addBackStackState(BackStackRecord state) {
    if (mBackStack == null) {
        mBackStack = new ArrayList<BackStackRecord>();
    }
    mBackStack.add(state);
    reportBackStackChanged();
}

您可以查看BackStackRecord类,了解更多addBackStackState方法的调用方式。