嗨,我已经读过这个Difference between add(), replace(), and addToBackStack()。我有一个困惑,如果我添加如下所示的多个片段,那么如果我按fragment2中的“后退”按钮,fragment1将打开吗?如果是这样,那么addToBackStack
和add
已经维护了堆栈的用途是什么。
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment1 = new Fragment();
ft.add(R.id.llContainer, fragment1, "fragment_one");
Fragment fragment2 = new Fragment();
ft.add(R.id.llContainer, fragment2, "fragment_two");
ft.commit();
答案 0 :(得分:1)
如果您多次在FragmentTransaction上调用 add 方法
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment1 = new Fragment();
ft.add(R.id.llContainer, fragment1, "fragment_one");
Fragment fragment2 = new Fragment();
ft.add(R.id.llContainer, fragment2, "fragment_two");
ft.commit();
然后添加到FragmentTransaction的两个片段将显示为重叠。
现在单击返回将关闭该应用程序。它不会开始上一个片段。
希望这就是您想要的。
答案 1 :(得分:1)
Add方法不会在BackStack中添加您的片段。您需要再次验证。
在查看addToBackStack
@Override
public FragmentTransaction addToBackStack(String name) {
if (!mAllowAddToBackStack) {
throw new IllegalStateException(
"This FragmentTransaction is not allowed to be added to the back stack.");
}
mAddToBackStack = true;
mName = name;
return this;
}
标记mAddToBackStack = true;
已启用,默认值为false
。这是用于将片段添加到堆栈的标志。看看下面的方法调用
@Override
public int commit() {
return commitInternal(false);
}
int commitInternal(boolean allowStateLoss) {
......
if (mAddToBackStack) {
mIndex = mManager.allocBackStackIndex(this);
} else {
mIndex = -1;
}
.....
}
所以您观察到的是不正确的。您缺少的东西