第三个片段不会被替换,只是添加在顶部

Third fragment wont get replaced, just added on top

我有 3 个简单的片段(用于测试目的)

片段 1

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/frameLHaupt"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".pkgActivity.FragmentHaupt">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Toolbar
            android:id="@+id/toolbar3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            android:theme="?attr/actionBarTheme" />
    </com.google.android.material.appbar.AppBarLayout>
    
</LinearLayout>

</FrameLayout>

片段 2:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLActionBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".pkgActivity.FragmentActionBar">

<!-- TODO: Update blank fragment layout -->

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:layout_editor_absoluteX="149dp"
    tools:layout_editor_absoluteY="174dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/nextFragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="next fragment" />

        <Button
            android:id="@+id/lastFragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="last fragment" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Bro welcome custom actionbar" />
    </LinearLayout>

</RelativeLayout>

和片段 3:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayoutViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".pkgActivity.FragmentViewPager">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" />
</FrameLayout>

正在调用片段 1 -> 片段 2:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLHaupt, fragment2);
fragmentTransaction.commit();

=> 此代码工作正常,片段 1 的框架布局被片段的框架布局替换

但是当我调用 Fragment2 -> Fragment3 时:

FragmentViewPager fragment2 = new FragmentViewPager();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLActionBar, fragment2);
fragmentTransaction.commit();

=> Fragment3 不会被替换,而是添加到 fragment2 之上。 W

我尝试使用 getActivity().getSuportFragmentManager() 但结果仍然相同,fragment3 被添加到 fragment2 之上。 可能是什么原因?我错过了什么吗?

您似乎为所有片段使用了不同的容器。当您替换片段时,容器 ID 表示片段所在的容器,不是 您要替换的视图的 ID。所以使用新的片段根作为片段容器是将每个片段放在前一个片段中。