Android FragmentTabHost如何在tab中获取片段的引用

时间:2014-11-26 14:34:59

标签: android android-fragments android-tabhost

我有一个Fragment,它实现了FragmentTabHost并创建了几个标签,每个标签都有一个片段。我试图获得对其中一个片段的引用,但是我在描述如何。

public class TabFragment extends Fragment {
    private FragmentTabHost mTabHost;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.container);

        addTab("study","Study",StudyFragment.class);
        addTab("tab2","Tab 2",Tab2Fragment.class);

        return mTabHost;
    }

    private <T extends Fragment> void addTab(String sTag, String sTitle, Class<T> c) {
        View tabView = createTabView(getActivity(),sTitle);

    mTabHost.addTab(mTabHost.newTabSpec(sTag).setIndicator(tabView),
                    c, null);
    }

    public StudyFragment getStudyFragment() {
        // not working as fragment has not been tagged
        return getChildFragmentManager().findFragmentByTag("study");
    }

所以问题是如何标记研究片段或在创建研究片段时返回对它的引用?

我已经看到了一些建议覆盖onAttachFragment的解决方案,但这是针对FragmentActivity而不是Fragment

2 个答案:

答案 0 :(得分:1)

要获取片段,您可以为片段设置ID,然后使用:

FragmentManager manager = getSupportFragmentManager();
MyFragment myFragment = (MyFragment)manager.findFragmentById(R.id.MyFragment);

答案 1 :(得分:-1)

好的,你必须使用TabHost.TabSpec这样添加标签:

tabHost = (FragmentTabHost)mainView.findViewById(android.R.id.tabhost);
tabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);

TabHost.TabSpec tabOne = tabHost.newTabSpec("One").setContent(R.id.fragOne);
TabHost.TabSpec tabTwo = tabHost.newTabSpec("Two").setContent(R.id.fragTwo);

tabHost.addTab(tabOne, TabOne.class, savedInstanceState);
tabHost.addTab(tabTwo, TabTwo.class, savedInstanceState);

在此代码中,R.id.fragOne和R.id.fragTwo引用活动布局中定义的两个FrameLayout。 如果你没有xml布局,你可以通过编程方式定义一个新的FrameLayout,每个标签都有一个id。