获得参考从FragmentTabHost嵌套片段(Getting reference to nest

2019-08-20 20:33发布

在我的应用程序中,我使用的Activity保持一个FragmentFragmentTabHost ,因此它的所有选项卡nested Fragments

内的Activity ,其保持Fragment与其nested Fragment ,我们可以得到使用附一个参考onAttachedFragment()

可是如何才能让一个参考nested FragmentFragmentTabHost

Answer 1:

那么,探索的源代码FragmentTabHost我发现,当它增加了一个片段选项卡,它assignes的标签TabSpec嵌套Fragment

因此,为了得到参考这个Fragment ,我们应该叫

getChildFragmentManager().findFragmentByTag(tabSpecTag)



Answer 2:

我是想这一段时间,但我得到null从返回FragmentManager因为我试图访问该经理onCreateView()加入之后。

这里是发生了什么好解释

同样重要的是要注意, Fragment还没有被选中不要在尚未存在标签FragmentManager ,等会返回null为好。 我周围这让通过调用mTabHost.setCurrentTab(index)试图获取对前FragmentFragmentManager 。 这不是很干净,但它的工作原理。



Answer 3:

上述解决方案也正在努力,但我有一个更简单的解决方案,

 @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你曾经使用过的片段。



Answer 4:

我发现我喜欢的好一点,因为它不涉及与延迟(总是玄乎给出的Android硬件碎片和不同的处理器速度)执行代码的解决方案。

在您的onTabChanged()方法,试图找到片段之前,调用executePendingTransactions()与您tabHost相关的片段经理。 它似乎有在FragmentTabHost源代码的一些地方,他们应该被调用executePendingTransactions(),但不这样做。

这工作的每一个例外......所选还是回来了空......在我的具体情况下,第一个选项卡的标签变化,我能区别无论如何处理此异常,通过把一些代码的onResume时间。

希望这可以帮助。



文章来源: Getting reference to nested fragment from FragmentTabHost