8

I have been attempting to implement the 'advanced' tabwidget example from google. But, when it tries to call tabHost.addTab(spec); I get a stack trace from the debugger. Sorry, I don't have the stack trace here, but I'm wondering if others have had this same issue (as this code had a number of typo's and missing information that stopped me from even compiling.

Can anyone point me to a corrected/running version of this code?

The updated information needed are:

<activity android:name=".ArtistsActivity"></activity>
<activity android:name=".AlbumsActivity"></activity>
<activity android:name=".SongsActivity"></activity>
KevinDTimm
  • 14,226
  • 3
  • 42
  • 60
  • I followed that example just last night and it worked fine. I didn't copy-paste the code out though, so it may be buggy. Get us your stack trace and we can help. – Jeremy Logan Feb 05 '10 at 23:41
  • While a new Android developer probably will need the syntax as spelled out here since it doesn't come up in any prior tutorial, they appear to have updated the tutorial to briefly mention this requirement in step 2: "Duplicate this for each of the three activities, and add the corresponding tags to the Android Manifest file" (20 Dec. 2010). If anyone needs it, the full [activity syntax reference](http://developer.android.com/guide/topics/manifest/activity-element.html) is available on developer.android.com. – patridge Dec 20 '10 at 18:09

4 Answers4

12

I spent the last hour or so going through that tutorial. Here's the problems and fixes for it that I dealt with:

Step 2: When creating your activities, if you do not create them through the manifest then you'll need to add them to the manifest manually.

Add these lines to AndroidManifest.xml:

  <activity android:name=".AlbumsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>
  <activity android:name=".ArtistsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>
          <activity android:name=".SongsActivity"
                  android:label="@string/app_name"
                  android:theme="@android:style/Theme.NoTitleBar">
        </activity>

Step 3: You are only instructed to create the ic_tab_artists.xml file. You'll need to create one for ic_tab_songs.xml and ic_tab_albums.xml as well. You can just duplicate the ic_tab_artists.xml (or change the HelloTabView.java tab specs to use the artists.xml file for each tab).

Step 4: The third to last line under /res/layout/main has a typo (a ; instead of a :)

      android:padding="5dp" />
    </LinearLayout>
</TabHost>

Step 6: There is a typo that uses calls mTabHost instead of tabHost. Change it.

As already cited the getIntent() function on the last line isn't appropriate. I just call the tab based on it's id. eg:

tabHost.setCurrentTabByTag("albums");
Ted
  • 161
  • 2
9

The current TabHost Example on the Android Developers site contains one error and also leaves out an important step that will prevent the example from running.

First off: In the onCreate() method that is added to HelloTabWidget class attempts to use a TabHost object called mTabHost. This is invalid, it should be tabHost.

Second: The tutorial leaves out the details that you need to add each of the activities too the AndroidManifest.xml. Without this the code will not work and you will get "force close" each time you attempt to execute.

crv
  • 3,024
  • 4
  • 27
  • 31
  • I saw that alluded to elsewhere on another site. I'll track it down, modify and accept when I've verified. Thx. – KevinDTimm Feb 08 '10 at 19:16
  • The 'elsewhere' is http://code.google.com/p/android/issues/detail?id=4183, but I haven't checked it yet. Tonight, I hope. – KevinDTimm Feb 09 '10 at 21:06
  • @GrandPrix: OMG I wish Google would fix their examples. They are still wrong! And I had the exact same problem and it was driving me insane today. Thank you SO much for this answer. :) – Dave May 06 '10 at 22:48
2

Also the

android:theme="@android:style/Theme.NoTitleBar"

does not work for me, if I replace it with

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

it works fine.

Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
1

The example, as corrected by Ted, also works if all three activities do not include the line:

android:theme="@android:style/Theme.NoTitleBar"

This is useful if you want a title bar in addition to the tab labels.

sll
  • 61,540
  • 22
  • 104
  • 156
Lou
  • 11
  • 1