findFragmentByTag - 在FragmentTabHost中查找片段 - 始终为null

时间:2013-05-17 19:27:28

标签: android actionbarsherlock android-tabhost fragment-tab-host

我无法获取指向Fragment的指针,Fragment是FragmentTabhost中当前可见的片段。

我有SherlockFragmentActivity名为SecondActivity,可以从onCreate方法加载Tabhost,如下所示:

if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
    Fragment f = new TabsFragment();

    getSupportFragmentManager().beginTransaction().add(android.R.id.content, f, "tabsfragment").commit();
}

TabsFragment是一个SherlockFragment子类,使用此onCreate方法创建标签

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.tabs);

        mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("Offers",
                getResources().getDrawable(R.drawable.offersale)),
                OfferListFragment.class,
                null);

        mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("News",
                getResources().getDrawable(R.drawable.newspaper)),
                NewsFragment.class,
                null);

        return mTabHost;

    }

现在当我进入第二个标签时,我在一个由原始活动SecondActivity启动的类中完成了后台任务,然后我调用它,这应该给我一个对标签的引用,但它总是返回null!

NewsFragment newsView = (NewsFragment) delegate.getSupportFragmentManager().findFragmentByTag("Tab2");

delegate变量是启动后台类时返回SecondActivity的指针。

如何获取指向标签片段的指针? 添加标签时设置的“Tab2”是否为片段的Tag错误?

1 个答案:

答案 0 :(得分:19)

我真的不喜欢回答我自己的问题,但是睡在它上面的东西真的很棒。 这个怪物给了我一个指向tabhost中片段的指针

NewsFragment newsView = (NewsFragment) delegate
                        .getSupportFragmentManager()
                        .findFragmentByTag("tabsfragment")
                        .getChildFragmentManager()
                        .findFragmentByTag("Tab2");