问题描述
好吧,我得到了一个简单的:
Well, i got a simple <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" />
然后在我的代码中,我添加了一个片段:
Then in my code, i added a Fragment to it:
FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
.replace(R.id.FragmentContainer, aFrag).commit();
在我的代码中的其他地方,我想从 ID R.id.FragmentContainer
中获取 FragClass (extends Fragment)
对象.
And somewhere else in my code, i want to get that FragClass (extends Fragment)
object from the ID R.id.FragmentContainer
.
我试过了
((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)
或
((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)
但他们返回的是 View
,而不是附加到它的 Fragment
.
but they are returning the View
, instead of the Fragment
attached to it.
我知道我可以将变量 aFrag
保存在某处,所以我不需要再次找到它.但我相信应该有办法收回它.
i know i can keep the variable aFrag
somewhere, so i do not need to find it again. But i believe there should be a way to retieve it.
推荐答案
让我用一个完整的答案来结束它:)
Let me wrap it up by a full answer :)
在这种情况下,动态添加的Fragment
使用容器View
(ViewGroup
)的ID.
In this case, the dynamically added Fragment
uses the ID of the container View
(ViewGroup
).
参考:http://developer.android.com/guide/components/fragment.html#Adding
注意:每个片段都需要一个唯一标识符,如果活动重新启动,系统可以使用该标识符来恢复片段(并且您可以使用它来捕获片段以执行事务,例如将其删除).可以通过三种方式为片段提供 ID:
- 提供具有唯一 ID 的 android:id 属性.
- 提供具有唯一字符串的 android:tag 属性.
- 如果前两个都不提供,系统将使用容器视图的 ID.
因为它毕竟是一个Fragment
.我们必须使用 getSupportFragmentManager().findFragmentById()
来检索它,它返回一个 Fragment
,而不是返回一个 findViewById()
代码>查看代码>.
It is because it's a Fragment
afterall. We have to use getSupportFragmentManager().findFragmentById()
to retrieve it, which returns a Fragment
, instead of findViewById()
which returns a View
.
所以这个问题的答案是:
So the answer to this problem would be:
((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))
感谢@Luksprog.
这篇关于获取动态附加到 <FrameLayout> 的 Fragment?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!