我希望我的标签显示在每个活动中,但它只出现在分配标签的活动中

时间:2013-12-12 07:50:36

标签: android android-activity android-tabhost

在“主页”选项卡中,有一个可以单击的菜单列表视图。如果你点击一个,它将转到一个新的活动,但标签已经消失。我希望标签出现在这个新活动和其他活动中。

这是我的主要活动(onCreate)

    @Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    hostTab = (TabHost) findViewById(R.id.tabhost);
    hostTab.setup(this.getLocalActivityManager());

    //setting tabs(images)
    mIntent = new Intent(this, HomeActivity.class);
    specTab = hostTab.newTabSpec("home").setIndicator(" ",getResources().getDrawable(R.drawable.home_tab)).setContent(mIntent);
    hostTab.addTab(specTab);
    hostTab.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.home_tab);
    //hostTab.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(150,50));

    mIntent = new Intent(this, ContactUsActivity.class);
    specTab = hostTab.newTabSpec("contactUs").setIndicator(" ",getResources().getDrawable(R.drawable.contact_us_tab)).setContent(mIntent);
    hostTab.addTab(specTab);
    hostTab.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.contact_us_tab);

    mIntent = new Intent(this, TravelDetailsActivity.class);
    specTab = hostTab.newTabSpec("travelDetails").setIndicator(" ",getResources().getDrawable(R.drawable.travel_details_tab)).setContent(mIntent);
    hostTab.addTab(specTab);
    hostTab.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.travel_details_tab);

    mIntent = new Intent(this, PortGuide.class);
    specTab = hostTab.newTabSpec("portGuide").setIndicator(" ",getResources().getDrawable(R.drawable.port_guide_tab)).setContent(mIntent);
    hostTab.addTab(specTab);
    hostTab.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.port_guide_tab);

    mIntent = new Intent(this, MoreMenu.class);
    specTab = hostTab.newTabSpec("more").setIndicator(" ",getResources().getDrawable(R.drawable.more_tab)).setContent(mIntent);
    hostTab.addTab(specTab);
    hostTab.getTabWidget().getChildAt(4).setBackgroundResource(R.drawable.more_tab);

}

这是我的主要活动xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  >
    <LinearLayout 
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
       <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="wrap_content"
            android:layout_height="0dp" 
            android:layout_weight="1">
        </FrameLayout>
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:gravity="bottom">
        </TabWidget>
     </LinearLayout>
</TabHost>

请随时评论我遗漏的内容,以便您进一步了解我的问题。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您应该创建一个FragmentActivity来托管多个Fragments作为孩子。您可以使用FragmentTabHost保留标签。

请参阅:
FragmentTabHost Documentation
TabHost Tutorial
Creating a Tab Layout with FragmentTabHost and Fragments

希望会有所帮助。

答案 1 :(得分:0)

您可以创建基本活动并编写与其中的标签相关的代码。

使用该活动扩展所有活动,并在所有活动的xml布局中包括与标签相关的部分。

创建BaseActivity有以下函数init:

public class BaseActivity extende Activity{

    public void init(){

     hostTab = (TabHost) findViewById(R.id.tabhost);
        hostTab.setup(this.getLocalActivityManager());

        //setting tabs(images)
        mIntent = new Intent(this, HomeActivity.class);
        specTab = hostTab.newTabSpec("home").setIndicator(" ",getResources().getDrawable(R.drawable.home_tab)).setContent(mIntent);
        hostTab.addTab(specTab);
        hostTab.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.home_tab);
        //hostTab.getTabWidget().getChildAt(0).setLayoutParams(new LinearLayout.LayoutParams(150,50));

        mIntent = new Intent(this, ContactUsActivity.class);
        specTab = hostTab.newTabSpec("contactUs").setIndicator(" ",getResources().getDrawable(R.drawable.contact_us_tab)).setContent(mIntent);
        hostTab.addTab(specTab);
        hostTab.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.contact_us_tab);

        mIntent = new Intent(this, TravelDetailsActivity.class);
        specTab = hostTab.newTabSpec("travelDetails").setIndicator(" ",getResources().getDrawable(R.drawable.travel_details_tab)).setContent(mIntent);
        hostTab.addTab(specTab);
        hostTab.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.travel_details_tab);

        mIntent = new Intent(this, PortGuide.class);
        specTab = hostTab.newTabSpec("portGuide").setIndicator(" ",getResources().getDrawable(R.drawable.port_guide_tab)).setContent(mIntent);
        hostTab.addTab(specTab);
        hostTab.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.port_guide_tab);

        mIntent = new Intent(this, MoreMenu.class);
        specTab = hostTab.newTabSpec("more").setIndicator(" ",getResources().getDrawable(R.drawable.more_tab)).setContent(mIntent);
        hostTab.addTab(specTab);
        hostTab.getTabWidget().getChildAt(4).setBackgroundResource(R.drawable.more_tab);

    }
}

其他活动将扩展这个

public class PortGuide extends BaseActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.<PortGuide layout>);
init();
}

}

确保你有这个:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  >
所有布局中的