调用其他片段

时间:2017-03-29 05:58:57

标签: android android-fragments

我目前正在开发一个将使用片段的示例应用,但即时通讯在更改片段时遇到一些问题。

我片段的默认布局是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()的数据。主要问题是片段附加不替换。

(见下图)

红色和黄色必须用蓝色片段替换

enter image description here

2 个答案:

答案 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不要使用第一种情况下使用的片段事务