将Fragment动态附加到<framelayout>?</framelayout>

时间:2013-03-19 06:17:49

标签: android android-layout android-fragments android-framelayout

好吧,我有一个简单的<FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FragmentContainer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

然后在我的代码中,我添加了一个片段:

FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
        .replace(R.id.FragmentContainer, aFrag).commit();

在我的代码中的其他地方,我想从ID FragClass (extends Fragment)获取R.id.FragmentContainer个对象。

我试过了

((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)

((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)

但他们将返回View,而不是附加到Fragment的内容。

我知道我可以将变量aFrag保留在某处,所以我不需要再找到它。但我相信应该有办法来解决它。

1 个答案:

答案 0 :(得分:84)

让我用一个完整的答案把它包起来:))

在这种情况下,动态添加的Fragment使用容器ViewViewGroup)的ID。

参考:http://developer.android.com/guide/components/fragments.html#Adding

  

注意:每个片段都需要一个唯一的标识符,如果重新启动活动,系统可以使用该标识符来恢复片段(您可以使用它来捕获片段以执行事务,例如删除它)。有三种方法可以为片段提供ID:

     
      
  • 使用唯一ID提供android:id属性。
  •   
  • 使用唯一字符串提供android:tag属性。
  •   
  • 如果您不提供前两个,系统将使用容器视图的ID。
  •   

这是因为它是Fragment毕竟,我们必须使用getSupportFragmentManager().findFragmentById()来检索它,它返回Fragent,而不是findViewById(),它返回View 1}}。

所以这个问题的答案是:

((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))

感谢@Luksprog。