以编程方式添加多个片段

我正在使用片段事务添加两个片段的活动。 但是恰好在应用程序启动时只显示第一个片段。 这里是代码:

主要活动

@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> 

所以我不知道可能是什么问题…我看到很多例子添加一个片段。

Solutions Collecting From Web of "以编程方式添加多个片段"

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

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

我没有真的跑这个程序,所以它可能是完全不同的东西…祝你好运!

因为这两个片段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”

我知道它太迟了,但我已经找出了这个问题。 您的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> 

观察LinearLayout将layout_height设置为match_parent 。 它不会占据整个屏幕?

只要使它wrap_content ,它会工作。 刚刚解决了我的情况是相同的你的。

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

是的你是对的,片段都被添加,但问题是片段布局被添加到另一个…问题是在片段代码

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

变成

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