簡體   English   中英

Android FragmentTabHost如何獲取對選項卡中的片段的引用

[英]Android FragmentTabHost how to get a reference to fragment in tab

我有一個實現FragmentTabHost的Fragment,並創建了幾個選項卡,每個選項卡都有一個Fragment。 我試圖獲得對這些片段之一的引用,但是卻對如何繪制一個空白。

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

要獲取片段,您可以為片段設置一個ID,然后使用以下代碼:

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

好的,因此您必須使用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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM