如何在TabHost中添加一些Fragment?

时间:2017-08-15 12:24:28

标签: android android-layout

我写了一些包含TabHost的应用。 每个选项卡都包含一个LinearLayout - 我想在每个选项卡中添加一些不同的存在片段

怎么做?

private void setNewTab(Context context, TabHost tabHost, String tag, String title, int contentID ){
    TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag);

    tabSpec.setIndicator(title);


    Fragment newFragment = new ActionFragment ();


    tabSpec.setIndicator(newFragment.getView());


    tabSpec.setContent(contentID);
    tabHost.addTab(tabSpec);                     // after this line i get an exception


}




<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </TabWidget>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:id="@+id/tab1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/holo_blue_light">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tab 1 Content" />

        </LinearLayout>

        <LinearLayout
            android:id="@+id/tab2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/holo_red_dark">
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tab 2 Content" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/tab3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/holo_green_light">
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tab 3 Content" />
        </LinearLayout>


    </FrameLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:4)

如果有多个标签,请将ViewPagerFragmentStatePagerAdapter一起使用。如果您只有2到3个标签,请使用PagerAdapter

查看以下链接,它非常清楚地解释了ViewPagerTabLayout一起使用的原因。

https://guides.codepath.com/android/google-play-style-tabs-using-tablayout

TabLayout ViewPager在您的方案中运行良好。

答案 1 :(得分:1)

快速搜索“Android Fragment TabHost”到FragmentTabHost class的文档结果中。你在用它吗?

    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

  mTabHost.addTab(mTabHost.newTabSpec("action").setIndicator("action"), ActionFragment.class, null);

我仍然认为TabLayout会更容易。

如果你想要底部的标签,甚至可以选择。

Which view should be used for new Material Design Bottom Navigation?