在我的应用程序中,我使用的Activity
保持一个Fragment
与FragmentTabHost
,因此它的所有选项卡nested Fragments
。
内的Activity
,其保持Fragment
与其nested Fragment
,我们可以得到使用附一个参考onAttachedFragment()
可是如何才能让一个参考nested Fragment
从FragmentTabHost
?
在我的应用程序中,我使用的Activity
保持一个Fragment
与FragmentTabHost
,因此它的所有选项卡nested Fragments
。
内的Activity
,其保持Fragment
与其nested Fragment
,我们可以得到使用附一个参考onAttachedFragment()
可是如何才能让一个参考nested Fragment
从FragmentTabHost
?
那么,探索的源代码FragmentTabHost
我发现,当它增加了一个片段选项卡,它assignes的标签TabSpec
嵌套Fragment
。
因此,为了得到参考这个Fragment
,我们应该叫
getChildFragmentManager().findFragmentByTag(tabSpecTag)
我是想这一段时间,但我得到null
从返回FragmentManager
因为我试图访问该经理onCreateView()
加入之后。
这里是发生了什么好解释
同样重要的是要注意, Fragment
还没有被选中不要在尚未存在标签FragmentManager
,等会返回null
为好。 我周围这让通过调用mTabHost.setCurrentTab(index)
试图获取对前Fragment
与FragmentManager
。 这不是很干净,但它的工作原理。
上述解决方案也正在努力,但我有一个更简单的解决方案,
@Override
public void onTabChanged(final String tabId) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mFragment = getChildFragmentManager().findFragmentByTag("Tagname");
}
},1000);
}
在这里,你必须实现FragmentTabHost.onTabChangeListener我们一直保持着从childFragmentManager取片段秒的延迟。
注意:您需要投mFragment你曾经使用过的片段。
我发现我喜欢的好一点,因为它不涉及与延迟(总是玄乎给出的Android硬件碎片和不同的处理器速度)执行代码的解决方案。
在您的onTabChanged()方法,试图找到片段之前,调用executePendingTransactions()与您tabHost相关的片段经理。 它似乎有在FragmentTabHost源代码的一些地方,他们应该被调用executePendingTransactions(),但不这样做。
这工作的每一个例外......所选还是回来了空......在我的具体情况下,第一个选项卡的标签变化,我能区别无论如何处理此异常,通过把一些代码的onResume时间。
希望这可以帮助。