如果向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();
当我再次添加片段"一个"时,对它的两个引用是在堆栈内部还是只有最新的?
答案 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
方法的调用方式。