2010-02-05 14 views
8

Ho tentato di implementare l'esempio "avanzato" tabwidget da Google. Ma quando tenta di chiamare tabHost.addTab(spec); ottengo una traccia dello stack dal debugger. Spiacente, non ho la traccia dello stack qui, ma mi chiedo se altri hanno avuto lo stesso problema (dato che questo codice aveva un numero di errori di digitazione e informazioni mancanti che mi impedivano di compilare anchecon TabHost Android

? me per un/versione corretta esecuzione di questo codice

le informazioni aggiornate necessarie sono:

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

Ho seguito quell'esempio proprio la scorsa notte e ha funzionato bene. Tuttavia, non ho copiato il codice, quindi potrebbe essere difettoso. Raccogli la tua traccia di stack e possiamo aiutarti. –

+0

Mentre un nuovo sviluppatore Android probabilmente avrà bisogno della sintassi come spiegato qui poiché non compare in nessun tutorial precedente, sembra che abbia aggiornato il tutorial per menzionare brevemente questo requisito nel passaggio 2: "Duplica questo per ognuno dei tre attività e aggiungi i tag corrispondenti al file manifest di Android "(20 dicembre 2010). Se qualcuno ne ha bisogno, il completo [riferimento sintassi attività] (http://developer.android.com/guide/topics/manifest/activity-element.html) è disponibile su developer.android.com. – patridge

risposta

9

la corrente TabHost Example sul sito Android Developers contiene un errore ed anche lascia fuori un passo importante che impedirà il esempio dalla corsa

Primo: Nel metodo onCreate() che viene aggiunto alla classe HelloTabWidget tenta di utilizzare un oggetto TabHost chiamato mTabHost. Questo non è valido, dovrebbe essere tabHost.

Secondo: Il tutorial lascia fuori i dettagli di cui è necessario aggiungere ciascuna attività anche su AndroidManifest.xml. Senza questo il codice non funzionerà e si otterrà la "chiusura forzata" ogni volta che si tenta di eseguire.

+0

Ho visto che alludevo altrove su un altro sito. Lo rintraccerò, modificherò e accetto quando ho verificato. Grazie. – KevinDTimm

+0

Il 'altrove' è http://code.google.com/p/android/issues/detail?id=4183, ma non l'ho ancora verificato. Stasera, spero. – KevinDTimm

+0

@GrandPrix: OMG Vorrei che Google aggiustasse i loro esempi. Sono ancora sbagliati! E ho avuto lo stesso identico problema e mi stava facendo impazzire oggi. Grazie mille per questa risposta. :) – Dave

12

Ho trascorso l'ultima ora circa nell'esercitazione. Ecco i problemi e le correzioni che ho risolto:

Passaggio 2: Durante la creazione delle attività, se non le si crea tramite manifest, è necessario aggiungerle manualmente al manifest.

aggiungere queste righe al 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> 

Fase 3: Viene richiesto solo per creare il file ic_tab_artists.xml. Dovrai crearne uno anche per ic_tab_songs.xml e ic_tab_albums.xml. Puoi semplicemente duplicare ic_tab_artists.xml (o modificare le specifiche della scheda HelloTabView.java per utilizzare il file artists.xml per ogni scheda).

Fase 4: La terza all'ultima linea sotto/res/layout/principale presenta un errore (a, invece di un :)

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

Fase 6: C'è una battitura che usi chiama mTabHost invece di tabHost. Cambiarlo.

Come già citato, la funzione getIntent() sull'ultima riga non è appropriata. Ho appena chiamato la scheda in base al suo id. ad esempio:

tabHost.setCurrentTabByTag("albums"); 
2

Anche il

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

non funziona per me, se lo sostituisco con

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

funziona benissimo.

1

L'esempio, rettificata da Ted, funziona anche se tutte e tre le attività non comprendono la linea:

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

Questo è utile se si desidera una barra del titolo, oltre alle etichette tab.

Problemi correlati