Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android TabView error?

I am trying to implement Tab View for my activity. I am getting an error that states.

java.lang.IllegalArgumentException: you must specify a way to create the tab indicator

     Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Resusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent().setClass(this, MonthActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost
        spec = tabHost.newTabSpec("Month")
                      .setContent(intent);
        tabHost.addTab(spec);

        // Do the same for the other tabs
        intent = new Intent().setClass(this, WeekActivity.class);
        spec = tabHost.newTabSpec("Week")
                .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, DayActivity.class);
        spec = tabHost.newTabSpec("Day")
                .setContent(intent);
        tabHost.addTab(spec);
        tabHost.setCurrentTab(2);

This is my xml and I've declared the Activities in the manifest.

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="5dp" >

    <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"
        android:padding="5dp" >
        </FrameLayout>
</LinearLayout>

Where am I making my mistake? Thanks for your time and input.

like image 689
Vinoth Avatar asked Nov 14 '11 12:11

Vinoth


2 Answers

try this:

Resources res = getResources(); // Resource object to get Drawables   
tabHost = getTabHost();  // The activity TabHost  
TabHost.TabSpec spec;  // Resusable TabSpec for each tab    
Intent intent;  // Reusable Intent for each tab   

intent = new Intent().setClass(this, First.class);      
spec = tabHost.newTabSpec("First Tab").setIndicator("First Tab",res.getDrawable(R.drawable.icon)).setContent(intent); 
tabHost.addTab(spec);   

intent = new Intent().setClass(this, Second.class); 
spec = tabHost.newTabSpec("Second Tab").setIndicator("Second Tab",res.getDrawable(R.drawable.icon)).setContent(intent); 
tabHost.addTab(spec); 

tabHost.setCurrentTab(1);

and make sure,your activity must be a TabActivity where you define your TabHost.

like image 197
Hiral Vadodaria Avatar answered Nov 01 '22 01:11

Hiral Vadodaria


A more clear and precise answer is that you haven't called the setIndicator method on the TabHost.TabSpec object, so if you add this call to every tab spec object, your problem will be resolved.

spec.setIndicator("Tab 1");

like image 36
user_CC Avatar answered Nov 01 '22 00:11

user_CC