我正在使用具有垂直方向的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();
但它只显示第一个片段。为什么呢?
答案 0 :(得分:18)
您可以在LinearLayout
中拥有多个片段。
如果您要将多个片段添加到同一容器中,则添加它们的顺序决定了它们在视图层次结构中的显示顺序
您的代码存在的问题是,由于您没有指定片段标记,因此默认为容器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>