2010-02-05 16 views
8

J'ai essayé d'implémenter l'exemple 'avancé' tabwidget de google. Mais, lorsqu'il essaie d'appeler tabHost.addTab(spec);, j'obtiens une trace de pile du débogueur. Désolé, je n'ai pas la trace de pile ici, mais je me demande si d'autres ont eu ce même problème (car ce code avait un certain nombre de typo et d'informations manquantes qui m'empêchaient de compiler même.)Problèmes avec Android TabHost Exemple

? me une version corrigée/en cours d'exécution de ce code

les informations mises à jour nécessaires sont:

<activity android:name=".ArtistsActivity"></activity> 
<activity android:name=".AlbumsActivity"></activity> 
<activity android:name=".SongsActivity"></activity> 
+0

J'ai suivi cet exemple la nuit dernière et ça a bien fonctionné. Je n'ai pas copié-collé le code, donc ça peut être buggé. Obtenez-nous votre trace de pile et nous pouvons vous aider. –

+0

Alors qu'un nouveau développeur Android aura probablement besoin de la syntaxe décrite ici car il n'apparaît dans aucun didacticiel, ils semblent avoir mis à jour le tutoriel pour mentionner brièvement cette exigence à l'étape 2: "Dupliquer ceci pour chacun des trois activités et ajoutez les balises correspondantes au fichier manifeste Android "(20 décembre 2010). Si quelqu'un en a besoin, la [référence de syntaxe d'activité] complète (http://developer.android.com/guide/topics/manifest/activity-element.html) est disponible sur developer.android.com. – patridge

Répondre

9

le TabHost Example actuel sur le site Développeurs Android contient une erreur et laisse également une étape importante qui permettra d'éviter la Exemple de fonctionnement

Tout d'abord: La méthode onCreate() ajoutée à la classe HelloTabWidget tente d'utiliser un objet TabHost appelé mTabHost. Ceci est invalide, il devrait être tabHost.

Deuxième: Le didacticiel ne contient pas les détails dont vous avez besoin pour ajouter chacune des activités à AndroidManifest.xml. Sans cela, le code ne fonctionnera pas et vous obtiendrez "force close" chaque fois que vous tenterez de l'exécuter.

+0

J'ai vu cela fait allusion ailleurs sur un autre site. Je vais suivre, modifier et accepter quand j'ai vérifié. THX. – KevinDTimm

+0

Le 'ailleurs' est http://code.google.com/p/android/issues/detail?id=4183, mais je ne l'ai pas encore vérifié. Ce soir, j'espère. – KevinDTimm

+0

@GrandPrix: OMG Je souhaite que Google corrige leurs exemples. Ils ont toujours tort! Et j'avais exactement le même problème et ça me rendait fou aujourd'hui. Merci beaucoup pour cette réponse. :) – Dave

12

J'ai passé la dernière heure à suivre ce tutoriel. Voici les problèmes et les correctifs pour cela que j'ai traité:

Étape 2: Lorsque vous créez vos activités, si vous ne les créez pas à l'aide du manifeste, vous devrez les ajouter manuellement au manifeste.

Ajouter ces lignes à 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> 

Étape 3: Vous ne créer le invité fichier ic_tab_artists.xml. Vous devrez également en créer un pour ic_tab_songs.xml et ic_tab_albums.xml. Vous pouvez simplement dupliquer le fichier ic_tab_artists.xml (ou modifier les spécifications de l'onglet HelloTabView.java pour utiliser le fichier artists.xml pour chaque onglet).

Étape 4: La troisième dernière ligne sous/res/layout/principale a une faute de frappe (un, au lieu d'un :)

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

Étape 6: Il y a une faute de frappe que les utilisations appelle mTabHost au lieu de tabHost. Changes le.

Comme déjà cité, la fonction getIntent() sur la dernière ligne n'est pas appropriée. Je viens d'appeler l'onglet en fonction de son identifiant. par exemple:

tabHost.setCurrentTabByTag("albums"); 
2

De plus, le

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

ne fonctionne pas pour moi, si je le remplace par

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

il fonctionne très bien.

1

L'exemple, tel que corrigé par Ted, travaille également si les trois activités ne comprennent pas la ligne:

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

Ceci est utile si vous voulez une barre de titre en plus des étiquettes de l'onglet.