Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 嵌套片段Backstack将新片段放置在下面,而不是替换_Android_Android Fragments_Back Stack - Fatal编程技术网

Android 嵌套片段Backstack将新片段放置在下面,而不是替换

Android 嵌套片段Backstack将新片段放置在下面,而不是替换,android,android-fragments,back-stack,Android,Android Fragments,Back Stack,当我尝试在我的应用程序中使用嵌套片段的backbackback时,会发生奇怪的行为 假设我有这个片段FragmentA,它以编程的方式放置在另一个根片段中,带有一个设计用来保存片段的线性布局 rootFragment的布局包含: <LinearLayout android:id="@+id/map_fragmentHolder" android:layout_height="0dp" android:layou

当我尝试在我的应用程序中使用嵌套片段的backbackback时,会发生奇怪的行为

假设我有这个片段FragmentA,它以编程的方式放置在另一个根片段中,带有一个设计用来保存片段的线性布局

rootFragment的布局包含:

    <LinearLayout
            android:id="@+id/map_fragmentHolder"
            android:layout_height="0dp"
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_weight="1.5" />
当替换currentFragment的片段属于不同类型时,这一点非常有效。然而,出于某种奇怪的原因,如果我尝试在当前添加了FragmentB类型的另一个片段时切换,则后堆栈会突然停止工作。将旧片段放置在当前片段的下方,而不是替换linearlayout中的所有片段

下面是我如何调用后堆栈来弹出的。这样做是因为onBackPressed()方法默认情况下不处理嵌套片段上的backbackback

public boolean onBackPressed() {
    if(fragmentStack.size() == 0)
        return false;

    //ChildFragmentManagers don't pop the backstack automatically, so we gotta do it manually...
    rootFragment.getChildFragmentManager().popBackStack();

    currentFragment = fragmentStack.pop();

    return true;
}
如果我简单地用下面的方法替换onBackPressed方法,我已经成功地使我的应用程序工作,但是我真的想知道发生了什么,以及为什么只有当我用相同类型的方法替换片段时才会发生

public boolean onBackPressed() {
    if(fragmentStack.size() == 0)
        return false;

    switchToFragment(fragmentStack.pop(), false);

    return true;
}
任何想法或见解都将不胜感激

public boolean onBackPressed() {
    if(fragmentStack.size() == 0)
        return false;

    switchToFragment(fragmentStack.pop(), false);

    return true;
}