<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="0dp"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="@+id/leftFragment"
app:layout_constraintEnd_toEndOf="parent">
<fragment
android:id="@+id/rightFragment"
android:name="com.example.a01fragment.RightFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
/></FrameLayout>
如上图,整个代码的结构是一个id为“frameLayout”的frame布局包裹一个id为“rightFragment”的碎片。我想把rightFragment换成anotherRightFragment。
FragmentManager manager=getFragmentManager();
AnotherRightFragment fragment=new AnotherRightFragment();
FragmentTransaction transaction=manager.beginTransaction();
transaction.replace(R.id.rightFragment,fragment);//要写layout
transaction.commit();
于是写了上图的代码: transaction.replace(R.id.rightFragment,fragment);
但却报了标题的错。
所以其实应该写下面的:
FragmentManager manager=getFragmentManager();
AnotherRightFragment fragment=new AnotherRightFragment();
FragmentTransaction transaction=manager.beginTransaction();
transaction.replace(R.id.frameLayout,fragment);//要写layout
transaction.commit();
也就是 :transaction.replace(R.id.frameLayout,fragment);
如果要替换fragment,不能直接对fragment进行替换,要把fragment用FrameLayout包裹起来,然后对FrameLayout中的内容进行替换。具体执行起来就是:replace函数传入的第一个参数应该是frameLayout的id,而不是fragment的id。