不能替换片段内的片段

时间:2014-12-14 21:43:10

标签: android android-fragments fragment

我有一个ListFragment:

    public void fragmentSelection(Integer count) {
      Fragment fr;
      if (count == 0) {
        fr = new Fragment1();
      } else {
        fr = new Fragment2();
      }
      FragmentManager fm = getFragmentManager();
      FragmentTransaction fragmentTransaction = fm.beginTransaction();
      fragmentTransaction.replace(R.id.content, fr, fr.getClass().getName());
      fragmentTransaction.commit();
    }

这里我试图用fr替换片段内容(取决于计数值)..

XML中的部分看起来像这样

<fragment 
  android:id="@+id/content" 
  android:name="com.test.app.DefaultContent" 
  android:layout_width="match_parent"
  android:layout_height="match_parent">
</fragment>

现在,当我想要替换片段&#34;内容&#34;用&#34; fr&#34;它不会以1:1替换它 - 它会将fr添加到已经存在的片段(这里是DefaultContent) - 所以 - 它为什么不替换它?我必须做的是,它取代它而不是将fr放在当前片段之下

1 个答案:

答案 0 :(得分:2)

您传递给replace()的视图ID(在您的情况下为R.id.content)必须是片段的父视图的ID,而不是原始片段本身。

这意味着您必须将android:id="@+id/content"设置为Fragment的父级,如下所示:

<FragmentLayout
    android:id="@+id/content" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment 
        android:name="com.test.app.DefaultContent" 
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FragmentLayout>

或者,如果这对您不起作用,请为父级设置一个新ID,并将其用于replace()