我有一个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
答案 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。