add与addToBackStack之间的区别

时间:2018-07-07 10:48:37

标签: android android-fragments

嗨,我已经读过这个Difference between add(), replace(), and addToBackStack()。我有一个困惑,如果我添加如下所示的多个片段,那么如果我按fragment2中的“后退”按钮,fragment1将打开吗?如果是这样,那么addToBackStackadd已经维护了堆栈的用途是什么。

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();

2 个答案:

答案 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的两个片段将显示为重叠。

enter image description here

现在单击返回将关闭该应用程序。它不会开始上一个片段。

希望这就是您想要的。

答案 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;
    }
    .....
}

所以您观察到的是不正确的。您缺少的东西