Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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 第三个碎片不会被替换,只是添加到上面_Android_Android Fragments_Android Fragmentactivity_Android Framelayout - Fatal编程技术网

Android 第三个碎片不会被替换,只是添加到上面

Android 第三个碎片不会被替换,只是添加到上面,android,android-fragments,android-fragmentactivity,android-framelayout,Android,Android Fragments,Android Fragmentactivity,Android Framelayout,我有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:

我有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>
=>此代码工作正常,fragment1 framelayout被片段的framelayout替换

但当我调用Fragment2->Fragment3时:

<?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>
FragmentViewPager fragment2 = new FragmentViewPager();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLActionBar, fragment2);
fragmentTransaction.commit();
=>碎片3不会被替换,而是添加到碎片2之上。W

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

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

只需检查:视图树中的
R.id.frameLActionBar
是唯一的id吗?与中一样,它并没有替换恰好位于顶部的其他布局?也可以尝试使用
parentFragmentManager
或其他东西……您似乎使用了两个不同的容器,
R.id.frameLHaupt
R.id.frameLActionBar
?@EdwardVanRaak是的,frameLActionbar是唯一的,只在我的片段2中使用,
replace
没有替换任何东西,因此片段没有被替换?还是我误解了你的问题?所以我应该始终使用:fragmentTransaction.replace(MAINCONTAINERID,fragment);?是的,如果你真的想替换它。否则,您不会替换任何内容,而是将一个片段添加到以前的空容器中。谢谢,我回家后会尝试,并告诉您它是否有效,这样我可以将您的答案标记为已接受。但是,我是如何用fragment1替换活动框架布局的呢。然后用碎片2替换碎片1也起作用了。是的,可能是的,我回家后再查。就我记忆所及,我总是使用getFragmentManager();我会让你知道:)成功了,问题是我没有使用相同的集装箱。谢谢你的帮助。我接受了你的答案并投了赞成票。
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLHaupt, fragment2);
fragmentTransaction.commit();
FragmentViewPager fragment2 = new FragmentViewPager();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLActionBar, fragment2);
fragmentTransaction.commit();