46

The Android Developers TabWidget tutorial says the following:

"You can implement your tab content in one of two ways: use the tabs to swap Views within the same Activity, or use the tabs to change between entirely separate activities."

The tutorial goes on to demonstrate how you can use tabs with separate Activities. I have been unable to find an example of using tabs with different Views within the same Activity. I would rather not re-invent this particular wheel, so I am hoping someone here knows how this is done and can clue me in. Thanks!

MikkoP
  • 4,864
  • 16
  • 58
  • 106
David
  • 461
  • 1
  • 4
  • 3

2 Answers2

40

I think in the .setContent method of each tab you pass in the view you wish to use:

TabHost.TabSpec spec1 = tabs.newTabSpec("tag1");
spec1.setContent(R.id.AnalogClock01);
spec1.setIndicator("Analog Clock");

Here's an example I found awhile back:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

  <TabHost android:id="@+id/TabHost01" android:layout_width="wrap_content" android:layout_height="wrap_content">
    <TabWidget android:id="@android:id/tabs" android:layout_width="wrap_content" android:layout_height="wrap_content" />
    <FrameLayout android:id="@android:id/tabcontent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="65px">
      <AnalogClock android:id="@+id/AnalogClock01" android:layout_width="wrap_content" android:layout_height="wrap_content"></AnalogClock>
      <DigitalClock android:text="DigitalClock01" android:id="@+id/DigitalClock01" android:layout_width="wrap_content" android:layout_height="wrap_content"></DigitalClock>
    </FrameLayout>
  </TabHost>
</LinearLayout>

And the Java code for this example is as follows:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TabHost;

public class tabexample extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TabHost tabs = (TabHost)findViewById(R.id.TabHost01);

        tabs.setup();

        TabHost.TabSpec spec1 = tabs.newTabSpec("tag1");

        spec1.setContent(R.id.AnalogClock01);
        spec1.setIndicator("Analog Clock");

        tabs.addTab(spec1);

        TabHost.TabSpec spec2 = tabs.newTabSpec("tag2");
        spec2.setContent(R.id.DigitalClock01);
        spec2.setIndicator("Digital Clock");

        tabs.addTab(spec2);
    }
}
Josh Lee
  • 171,072
  • 38
  • 269
  • 275
ninjasense
  • 13,756
  • 19
  • 75
  • 92
  • What if I've to do some "task" on each view? For example, if I've to parse some XML on View1 and show data after querying SQLITE database on View2? Writing separate activities for each tab is the only solution in this case? – Mudasser Hassan Jul 17 '12 at 07:13
4

I used this one and it was fine for me http://www.codeproject.com/Articles/107693/Tabbed-Applications-in-Android

Islam A. Hassan
  • 1,357
  • 15
  • 20