2010-06-23 24 views
5

Estoy tratando de crear múltiples pestañas, cada una con una actividad diferente. El único inconveniente es que estoy usando un archivo de diseño personalizado por lo tanto, mi clase extiende una actividad en lugar de TabActivity. Al intentar ejecutar, falla y sugiere llamar a TabHost.Setup(ActivityGroupManager agm)Android TabHost - Actividades dentro de cada pestaña

¿Alguien tiene una idea/ejemplo práctico de cómo se puede lograr esto?

Gracias de antemano

+0

"... cada uno con una actividad diferente" - es probable que decir diferente "Ver". –

+0

La extensión de 'TabActivity' solo es necesaria para la actividad principal que aloja las pestañas. Todas las otras actividades en las pestañas simplemente pueden extender la Actividad y funcionarán perfectamente. – codinguser

Respuesta

6

Ésta es una muestra de mi actividad que, además, no se extienden desde TabActivity:

protected TabHost tabs; 

// ... 

/** 
* Init tabs. 
*/ 
private void initTabs() { 
    tabs = (TabHost) findViewById(R.id.tabhost); 
    tabs.setup(); 
    tabs.setBackgroundResource(R.drawable.bg_midgray); 

    TabHost.TabSpec spec; 

    // Location info 
    txtTabInfo = new TextView(this); 
    txtTabInfo.setText("INFO"); 
    txtTabInfo.setPadding(0, 0, 0, 0); 
    txtTabInfo.setTextSize(14); 
    txtTabInfo.setBackgroundResource(R.drawable.bg_tab_left_inactive_right_inactive); 
    txtTabInfo.setTextColor(Color.DKGRAY); 
    txtTabInfo.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.TOP); 
    txtTabInfo.setHeight(39); 
    spec = tabs.newTabSpec("tabInfo"); 
    spec.setContent(R.id.tabInfo); 
    spec.setIndicator(txtTabInfo); 
    tabs.addTab(spec); 

    // Maps 
    txtTabMap = new TextView(this); 
    txtTabMap.setText("MAP"); 
    txtTabMap.setTextSize(14); 
    txtTabMap.setPadding(0, 0, 0, 0); 
    txtTabMap.setBackgroundResource(R.drawable.bg_tab_middle_inactive_right_active); 
    txtTabMap.setTextColor(Color.DKGRAY); 
    txtTabMap.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.TOP); 
    txtTabMap.setHeight(39); 
    spec = tabs.newTabSpec("tabMap"); 
    spec.setContent(R.id.tabMap); 
    spec.setIndicator(txtTabMap); 
    tabs.addTab(spec); 

    tabs.setCurrentTab(0); 

    tabs.setOnTabChangedListener(this); 
} 

// ... 
+0

Thnaks, funciona como un encanto ahora. – Muniu

+0

genial funcionó. por favor, acepte la respuesta haciendo clic en la marca de verificación, si fue útil :) –

1

hacer una clase adicional que se extiende TabActivity y hacer que la clase de la actividad principal.

hacer eso en su manifiesto XML debería incluir:

<activity android:name=".TabActivtyClass" android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

En esta clase podría escribir algo como:

public class TabActivtyClass extends TabActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TabHost tabHost = getTabHost(); // The associated TabHost 

     // Create an Intent to launch given Activty for this tab 
     Intent i = new Intent().setClass(this, FirstActivty.class); 
     TabHost.TabSpec spec = tabHost.newTabSpec("tab_name").setIndicator("Tab Name").setContent(i); // <- references the intent we just created 
     tabHost.addTab(spec); 

     // And do the same for the other tabs ... 
    } 
} 


Esta clase TabActivty puede ser tan grande o tan pequeño como te gustaría, pero normalmente sería la pantalla completa, con la actividad de cada pestaña cargándose en la parte principal de la pantalla, así: Example http://developer.android.com/resources/tutorials/views/images/hello-tabwidget.png


P.S. También tenga en cuenta que el editor de diseño de Eclipse no funciona con las pestañas. Es a bug which has already been logged.

2

En primer lugar, defina una pestaña de fotograma en el diseño principal.

<tabhost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
    <linearlayout android:orientation="vertical" 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"> 
     <framelayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="5dp"> 
     </framelayout> 
    </tabwidget> 
</linearlayout> 
</tabhost> 

A continuación, cree una actividad se extiende desde TabActivity

Resources res = getResources(); 
TabHost tabHost = getTabHost(); 
TabHost.TabSpec spec; 
Intent intent; 
intent = new Intent().setClass(this, DashboardActivity.class); 
spec = tabHost.newTabSpec("home").setIndicator("Home", res.getDrawable (R.drawable.ic_tab_dashboard)).setContent(intent); 
tabHost.addTab(spec); 
intent = new Intent().setClass(this, CreditCardActivity.class); 
spec = tabHost.newTabSpec("sample1").setIndicator("Sample Tab",res.getDrawable (R.drawable.ic_tab_sample1)).setContent(intent); 
tabHost.addTab(spec); 

Si desea pestaña rolover, el uso del selector de diseño:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/helpblue" android:state_selected="true"> 
    <item android:drawable="@drawable/helpgray"></item> 
</item></selector> 

Aquí es capturas de pantalla de ejemplo.

alt text http://rayyildiz.com/wp-content/uploads/2010/06/android_sample_tab-201x300.pngalt text http://rayyildiz.com/wp-content/uploads/2010/06/android_sample_tab2-201x300.png

Cuestiones relacionadas