无法将多个片段添加到LinearLayout

时间:2014-03-21 11:54:55

标签: android android-fragments android-linearlayout

我正在使用具有垂直方向的LinearLayout来列出片段。我以编程方式将片段添加到容器中:

FragmentTransaction ft = fragmentManager.beginTransaction();

Fragment fragment1 = new Fragment();
ft.add(R.id.llContainer, fragment1);

Fragment fragment2 = new Fragment();
ft.add(R.id.llContainer, fragment2);

ft.commit();

但它只显示第一个片段。为什么呢?

5 个答案:

答案 0 :(得分:18)

您可以在LinearLayout中拥有多个片段。

根据documentation

  

如果您要将多个片段添加到同一容器中,则添加它们的顺序决定了它们在视图层次结构中的显示顺序

您的代码存在的问题是,由于您没有指定片段标记,因此默认为容器ID。由于两个事务的容器ID相同,因此第二个事务替换了第一个片段,而不是单独将它添加到容器中。

要做你想做的事,请使用以下内容:

FragmentTransaction ft = fragmentManager.beginTransaction();

Fragment fragment1 = new Fragment();
ft.add(R.id.llContainer, fragment1, "fragment_one");

Fragment fragment2 = new Fragment();
ft.add(R.id.llContainer, fragment2, "fragment_two");

ft.commit();

答案 1 :(得分:9)

我猜你必须在你的布局中为每个片段定义separe容器。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:baselineAligned="false"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/content_secondary"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </FrameLayout>

     <FrameLayout
         android:id="@+id/content_primary"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_weight="1" >
     </FrameLayout>

</LinearLayout>

答案 2 :(得分:2)

通过将其添加到linearlayout来解决它:

android:orientation="vertical"

答案 3 :(得分:1)

有同样的问题,但使用

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.control_list, container, false);

即。使用xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical" android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/control_list">
</LinearLayout>

解决了我的问题。 以编程方式创建LinearList时,只有第一个片段出现在我面前。

使用xml文件作为要添加片段的布局。

答案 4 :(得分:0)

我遇到了这个问题,因为我正在膨胀的布局高度为“match_parent”而不是“wrap_content”。 LinearLayout和它的容器高度没有变化。

<强> TestFragment.java

...
@Nullable
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.test_fragment_layout, container, false);
}
...

<强> test_fragment_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- ... -->

</android.support.constraint.ConstraintLayout>