Android 第三个碎片不会被替换,只是添加到上面
我有3个简单的片段(用于测试目的) 片段1Android 第三个碎片不会被替换,只是添加到上面,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:
<?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();