获取片段dynamic附加到<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 R.id.FragmentContainer获得FragClass (extends Fragment)对象。

我努力了

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

要么

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

但他们正在返回View ,而不是附加到它的Fragment

我知道我可以把variablesaFrag放在某个地方,所以我不需要再find它。 但是我相信应该有一种方法来解决这个问题。

让我包装一个完整的答案:)

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

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

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

  • 提供具有唯一ID的android:id属性。
  • 提供具有唯一string的android:tag属性。
  • 如果您既不提供前两项,系统也使用容器视图的ID。

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

所以这个问题的答案是:

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

感谢@Luksprog。