2010-09-16 14 views
6

Estoy desarrollando una aplicación de Android con un diseño con pestañas. Lo llevé a donde no aparece una actividad nueva como Google's tutorial suggested, sin embargo, solo hice esto para que mi contenido se muestre al hacer clic en cada pestaña. Actualmente solo muestra negro independientemente de qué pestaña esté activa.Diseño con pestañas de Android setContenido

La siguiente es mi código en su última iteración:

Main.java

public class Main extends TabActivity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Resources res = getResources(); 
     TabHost tabHost = getTabHost(); 
     TabHost.TabSpec spec; 

     // add orders tab 
     spec = tabHost.newTabSpec("orders").setIndicator("Orders", 
          res.getDrawable(R.drawable.flash_36)) 
          .setContent(R.id.ordersLayout); 
     tabHost.addTab(spec); 

     // add positions tab 
     spec = tabHost.newTabSpec("positions").setIndicator("Positions", 
          res.getDrawable(R.drawable.small_tiles_36)) 
          .setContent(R.id.positionsLayout); 
     tabHost.addTab(spec); 

     // add strategies tab 
     spec = tabHost.newTabSpec("strategies").setIndicator("Strategies", 
          res.getDrawable(R.drawable.cards_36)) 
          .setContent(R.id.strategiesLayout); 
     tabHost.addTab(spec); 

     // add account tab 
     spec = tabHost.newTabSpec("account").setIndicator("Account", 
          res.getDrawable(R.drawable.seal_36)) 
          .setContent(R.id.accountLayout); 
     tabHost.addTab(spec); 

     tabHost.setCurrentTab(1); 
    } 

} 

Main.xml

<?xml version="1.0" encoding="utf-8"?> 


<TabHost android:id="@android:id/tabhost" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

      <LinearLayout android:id="@+id/mainLayout" 
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:padding="5dp"> 

       <TabWidget android:id="@android:id/tabs" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content"> 
       </TabWidget> 

       <FrameLayout android:id="@android:id/tabcontent" 
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:background="#fff" 
          android:padding="5dp"> 

          <include layout="@layout/orders"/> 
          <include layout="@layout/positions"/> 
          <include layout="@layout/strategies"/> 
          <include layout="@layout/account"/> 

       </FrameLayout> 

      </LinearLayout> 

</TabHost> 

Account.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:id="@+id/accountLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#fff" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <TextView 
     android:text="Account Information" 
     android:id="@+id/accountLabel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

    </TextView> 

</LinearLayout> 

Orders.xml

sólo estoy incluyendo estos dos, que son todos exactamente el mismo con las identificaciones apropiadas para Android del LinearLayout: parámetro id.

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:id="@+id/ordersLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#fff" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <TextView 
     android:text="Working Orders" 
     android:id="@+id/ordersLabel" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

    </TextView> 

</LinearLayout> 

Y aquí está una captura de pantalla de lo que me pasa cuando se cambia entre pestañas:

órdenes Tab

alt text

Posiciones Tab

alt text

Esto es cierto tanto para el emulador como para el Samsung Galaxy que acabo de recibir, y lo recomiendo encarecidamente, ¿alguna idea?

Respuesta

5

lo he descubierto, y es una simple adición de parámetros al archivo main.xml:

Main.xml (revisada)

<?xml version="1.0" encoding="utf-8"?> 


<TabHost android:id="@android:id/tabhost" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      xmlns:android="http://schemas.android.com/apk/res/android"> 

      <LinearLayout android:id="@+id/mainLayout" 
          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"> 
       </TabWidget> 

       <FrameLayout android:id="@android:id/tabcontent" 
          android:layout_width="fill_parent" 
          android:layout_height="fill_parent" 
          android:background="#fff" 
          android:padding="5dp"> 

          <include layout="@layout/orders"/> 
          <include layout="@layout/positions"/> 
          <include layout="@layout/strategies"/> 
          <include layout="@layout/account"/> 

       </FrameLayout> 

      </LinearLayout> 

</TabHost> 

Aviso del LinearLayout, que ahora incluye el parámetro android: orientation. Lo que estaba haciendo antes era empujar todo lo demás fuera de la pantalla hacia la derecha. Ahora funciona como debería.

Nota: En la oficina mañana puedo probar si esto todavía me permite rotar el teléfono y hacer que se visualice correctamente en orientación horizontal. Si no es así, entonces probablemente tendré que crear un archivo xml separado para horizontal, a menos que alguien tenga una idea de esto, por supuesto.

+0

+1 por la respuesta y una muy buena explicación. – Subby

Cuestiones relacionadas