2010-02-05 14 views
8

He estado intentando implementar el ejemplo 'avanzado' tabwidget de google. Pero, cuando intenta llamar al tabHost.addTab(spec); obtengo un seguimiento de la pila del depurador. Lo siento, no tengo el seguimiento de pila aquí, pero me pregunto si otros han tenido este mismo problema (ya que este código tenía una cantidad de errores tipográficos y la información faltante que me impidió siquiera compilar.Problemas con Android TabHost Ejemplo

¿Alguien puede señalar? ? me a una versión corregida/marcha de este código

la información actualizada que se necesitan son:

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

Seguí ese ejemplo la última noche y funcionó bien. Sin embargo, no copié y pegué el código, por lo que puede tener errores. Consíguenos tu rastro de pila y te podemos ayudar. –

+0

Si bien es probable que un desarrollador de Android nuevo necesite la sintaxis tal como se describe aquí, ya que no aparece en ningún tutorial anterior, parece que ha actualizado el tutorial para mencionar brevemente este requisito en el paso 2: "Duplica esto para cada uno tres actividades, y agregue las etiquetas correspondientes al archivo de Manifiesto de Android "(20 de diciembre de 2010). Si alguien lo necesita, la [referencia de sintaxis de la actividad] completa (http://developer.android.com/guide/topics/manifest/activity-element.html) está disponible en developer.android.com. – patridge

Respuesta

9

la corriente TabHost Example en el sitio de desarrolladores de Android contiene un error y también deja fuera un paso importante que evitará la ejemplo de ejecución.

Primero apagado: En el método onCreate() que se agrega a la clase HelloTabWidget intenta utilizar un objeto TabHost llamado mTabHost. Esto no es válido, debe ser tabHost.

Segundo: El tutorial omite los detalles que necesita para agregar también cada una de las actividades al AndroidManifest.xml. Sin esto, el código no funcionará y obtendrá "fuerza cercana" cada vez que intente ejecutar.

+0

Vi eso aludido en otro lugar en otro sitio. Lo rastrearé, modificaré y aceptaré cuando lo haya verificado. Gracias. – KevinDTimm

+0

El 'en otro lugar' es http://code.google.com/p/android/issues/detail?id=4183, pero aún no lo he comprobado. Esta noche, espero. – KevinDTimm

+0

@GrandPrix: OMG Deseo que Google solucione sus ejemplos. ¡Todavía están equivocados! Y tuve exactamente el mismo problema y me estaba volviendo loco hoy. Muchas gracias por esta respuesta. :) – Dave

12

Pasé la última hora revisando ese tutorial. Aquí están los problemas y las soluciones que he tratado:

Paso 2: Al crear sus actividades, si no las crea mediante el manifiesto, deberá agregarlas manualmente al manifiesto.

Añadir estas líneas para 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> 

Paso 3: Sólo se le indique que debe crear el archivo ic_tab_artists.xml. Necesitarás crear uno para ic_tab_songs.xml y ic_tab_albums.xml también. Puede duplicar el ic_tab_artists.xml (o cambiar las especificaciones de la pestaña HelloTabView.java para usar el archivo artists.xml para cada pestaña).

Paso 4: La tercera a la última línea en/res/layout/principal tiene un error tipográfico (a; en lugar de un :)

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

Paso 6: Hay un error tipográfico que los usos llama a mTabHost en lugar de a tabHost. Cambialo.

Como ya se mencionó, la función getIntent() en la última línea no es apropiada. Solo llamo a la pestaña en función de su id. por ejemplo:

tabHost.setCurrentTabByTag("albums"); 
2

También el

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

no funciona para mí, si reemplazo con

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

funciona bien.

1

El ejemplo, en su versión corregida por Ted, también funciona si las tres actividades no incluyen la línea:

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

Esto es útil si se desea una barra de título, además de las etiquetas de las solapas.

Cuestiones relacionadas