Changing view inside TabHost (one activity, multiple views)

13,270

you can use intent to set Activity as your tab content, and this activity can call other activities, either listView or any other.

/** tid1 is firstTabSpec Id. Its used to access outside. */
        TabSpec MainTab = tabHost.newTabSpec("tag1");
        TabSpec SearchTab = tabHost.newTabSpec("tag2");
        TabSpec MessageTab = tabHost.newTabSpec("tag3");
        TabSpec ServicesTab = tabHost.newTabSpec("tag4");
        TabSpec SettingsTab = tabHost.newTabSpec("tag5");

        MainTab.setIndicator("Main", res.getDrawable(R.drawable.anchor_36));
        MainTab.setContent(new Intent(this, MainView.class));

    SearchTab.setIndicator("Search", res.getDrawable(R.drawable.clock_36));
    SearchTab.setContent(new Intent(this, SearchView.class));

    MessageTab.setIndicator("Messages", res
            .getDrawable(R.drawable.dialog_36));
    MessageTab.setContent(new Intent(this, MessagesView.class));

    ServicesTab.setIndicator("Services", res
            .getDrawable(R.drawable.cloud_36));
    ServicesTab.setContent(new Intent(this, ServicesView.class));

    SettingsTab.setIndicator("Settings", res
            .getDrawable(R.drawable.settings_36));
    SettingsTab.setContent(new Intent(this, SettingsView.class));

    /** Add tabSpec to the TabHost to display. */
    tabHost.addTab(MainTab);
    tabHost.addTab(SearchTab);
    tabHost.addTab(MessageTab);
    tabHost.addTab(ServicesTab);
    tabHost.addTab(SettingsTab);

Now in the loaded activity you can use the code like

StartActivity(new intent(currentActivity.this, newActivity.class));

this will work for you.

Share:
13,270
Alekc
Author by

Alekc

Updated on June 09, 2022

Comments

  • Alekc
    Alekc about 2 years

    right now I'm using in my application tabhost with single activity and separate views.

    Tab Activity:

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        TabHost tabs = (TabHost) findViewById(R.id.tabhost);        
        tabs.setup();
    
        TabHost.TabSpec spec = tabs.newTabSpec(TAB_HOTELS);
        spec.setContent(R.id.tab1);
        spec.setIndicator("Hotels");
        tabs.addTab(spec);
    
        spec = tabs.newTabSpec(TAB_LAST_MINUTE);
        spec.setContent(R.id.tab2);
        spec.setIndicator("Last Minute");
        tabs.addTab(spec);
    

    Layout

    <?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">
            <TabWidget android:id="@android:id/tabs"
                android:layout_width="fill_parent" android:layout_height="wrap_content" />
            <FrameLayout android:id="@android:id/tabcontent"
                android:layout_width="fill_parent" android:layout_height="fill_parent">
                <LinearLayout android:layout_width="fill_parent"
                    android:layout_height="fill_parent" android:id="@+id/tab1"
                    android:orientation="vertical">
                    <ListView android:id="@+id/listaLocalita"
                        android:layout_width="fill_parent" android:layout_height="wrap_content" />
                </LinearLayout>
    
                <LinearLayout android:layout_width="fill_parent"
                    android:layout_height="fill_parent" android:id="@+id/tab2"
                    android:orientation="vertical" android:paddingTop="60px">
                    <TextView android:layout_width="fill_parent"
                        android:layout_height="100px" android:text="This is tab 2"
                        android:id="@+id/txt2" />
                </LinearLayout>
            </FrameLayout>
        </LinearLayout>
    </TabHost>
    

    And things are working quite well as long as i'm using one level depth. Unfortunately now I need to make one of the tab to work like following:

    Tab loading ListView with the list of cities, User clicks on city name, tab's content is replaced with the list of the Hotels, user choose a hotel and always in the the same tab, hotel's info is loaded.

    How can i achieve this scenario? LayoutInflater?

    Thanks in advance.