好吧,我有一个简单的<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
保留在某处,所以我不需要再找到它。但我相信应该有办法来解决它。
答案 0 :(得分:84)
让我用一个完整的答案把它包起来:))
在这种情况下,动态添加的Fragment
使用容器View
(ViewGroup
)的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。