8

我正在使用片段事务将两个片段添加到一个活动中。但是碰巧在启动应用程序时只显示第一个 Fragment。这是代码:

主要活动

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FragOne firstButton = new FragOne();
    FragmentTwo secButton = new FragmentTwo();

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    transaction.add(R.id.frag_container, firstButton);
    transaction.add(R.id.frag_container, secButton);

    transaction.commit();
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:id="@+id/frag_container"
    android:layout_height="fill_parent" 
    android:orientation="horizontal">

</LinearLayout>

frag_one.xml 和 frag_two.xml 类似

<?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:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

所以我不确定可能是什么问题......我看到了很多添加一个片段的例子。

4

5 回答 5

4

我知道现在回答为时已晚,但我已经找到了问题所在。您的 frag_one.xml 和 frag_two.xml 看起来像:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

观察将LinearLayoutlayout_height 设置为match_parent. 它不会占据整个屏幕吗?

只要做到这一点wrap_content,它就会起作用。刚刚解决了我的情况,这与你的情况相同。

于 2016-10-21T01:30:10.790 回答
3

我不确定,但有可能实际上添加了两个片段,但是因为它们完全相同并且位于 LinearLayout 中 - 一个隐藏了另一个。

如果我是你,我会将主要活动中的布局更改为相对布局,并将片段添加到两个不同的占位符以检查这是否是问题所在。

我实际上并没有运行该程序,所以它可能完全是另外一回事......祝你好运!

于 2013-01-27T16:48:47.450 回答
3

因为两个片段 xml 文件的高度参数都是“match_parent”

<?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"  WRONG!!! need to be "wrap_content"*
    android:orientation="vertical" >
   <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button One" />
</LinearLayout>

因此,您的第一个片段在他父母的整个高度上膨胀,当其他片段添加时,它们没有位置。

因此在 onCreateView 方法中将容器参数设置为 null 并不是解决问题的正确方法。

你只需要设置 android:layout_height="wrap_content"

于 2014-06-18T20:45:14.773 回答
1

我的问题是通过确保 LinearLayout 将其方向设置为垂直而不是默认水平来解决的。

于 2014-03-19T05:16:55.923 回答
0

是的,你是对的,片段都被添加了,但问题是片段布局被一个接一个地添加......问题出在片段代码中

View view = inflater.inflate(R.layout.frag_one, container, false);

变成

View view = inflater.inflate(R.layout.frag_one, null);
于 2013-01-29T09:59:19.827 回答