我目前正在开发一个将使用片段的示例应用,但即时通讯在更改片段时遇到一些问题。
我片段的默认布局是fragmentOne(参见下面的代码)。
<fragment
android:id="@+id/fplace"
android:layout_width="match_parent"
android:layout_height="498dp"
android:name="layout.FragmentOne"
tools:layout="@layout/fragment_fragment_one" />
这是正常的。
但是当我改变片段时它会附加。行为必须替换不附加的片段。
这是我的活动代码(见下面的代码)。
public void onClick(View view) {
Button button = (Button) view;
Fragment fragment = null;
switch (button.getId()) {
case R.id.f1:
fragment = new FragmentOne();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fplace, fragment);
ft.commit();
break;
case R.id.f2:
fragment = new FragmentTwo();
fm = getFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.fplace, fragment);
ft.commit();
break;
}
}
从片段中我正在加载正在正常工作的onCreateView()的数据。主要问题是片段附加不替换。
(见下图)
红色和黄色必须用蓝色片段替换
答案 0 :(得分:1)
正如迈克在评论中所说的那样
您无法删除/替换布局中声明的碎片。
所以这里有解决方案。而不是xml中的fragment
使用framelayout
作为容纳fragment
的容器
在xml中使用此代替fragment
<FrameLayout
android:id="@+id/fplace"
android:layout_width="match_parent"
android:layout_height="498dp"
/>
希望这会对你有所帮助。
答案 1 :(得分:0)
在第二种情况下声明一个新的fragmenttransaction不要使用第一种情况下使用的片段事务