获取片段动态附加到 <FrameLayout>?
Posted
技术标签:
【中文标题】获取片段动态附加到 <FrameLayout>?【英文标题】:Get Fragment dynamically attached to <FrameLayout>? 【发布时间】:2013-03-07 17:27:45 【问题描述】:嗯,我有一个简单的<FrameLayout>
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/FragmentContainer"
android:layout_
android:layout_ />
然后在我的代码中,我添加了一个片段:
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
。
我知道我可以将变量 aFrag
保存在某个地方,所以我不需要再次找到它。但我相信应该有办法找回它。
【问题讨论】:
developer.android.com/reference/android/app/… 感谢@Luksprog 的回复。但我无法向 aFrag 添加 ID。 没有,即使你用上面的方法和R.id.FragmentContainer
?
哦,是的!答对了!我一直在问愚蠢的问题(嘘......)答案是:((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))
。谢谢@Luksprog
【参考方案1】:
让我用一个完整的答案来结束它:)
在这种情况下,动态添加的Fragment
使用容器的IDView
(ViewGroup
)。
参考:http://developer.android.com/guide/components/fragments.html#Adding
注意:每个片段都需要一个唯一标识符,如果活动重新启动,系统可以使用该标识符来恢复片段(您可以使用它来捕获片段以执行事务,例如删除它)。可以通过三种方式为片段提供 ID:
为 android:id 属性提供唯一 ID。 为 android:tag 属性提供一个唯一的字符串。 如果前两个都不提供,系统将使用容器视图的 ID。
因为它毕竟是Fragment
。我们必须使用getSupportFragmentManager().findFragmentById()
来检索它,它返回一个Fragment
,而不是返回一个View
的findViewById()
。
所以这个问题的答案是:
((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))
感谢@Luksprog。
【讨论】:
容器活动启动时可能返回null? @HassanMakarov - 感谢您的评论。抱歉,我已经有几年没有编写 Android 代码了。因此,请对我的回复持保留态度。由于我已将 aFrag 附加到 FragmentContainer,为什么它会返回 null?你能解释一下吗? Fragment 不是 View 的子类,因此容器视图可以与 Fragment 具有相同的 id。对吗?以上是关于获取片段动态附加到 <FrameLayout>?的主要内容,如果未能解决你的问题,请参考以下文章