获取片段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
使用容器View
( ViewGroup
)的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。