studio programacion pestañas móviles fragments example desarrollo curso aplicaciones android tabs android-intent

programacion - tabs en android studio



Android: cambie de pestaña dentro de una actividad dentro de una pestaña (7)

Acabo de poner un public static TabHost tabHost; en mi TabActivity .

Luego, desde cualquier otra pestaña, puedo hacer una MyTabActivity.tabHost.setCurrentTab(tabNumber);

Funciona bien para mí (pero me gustaría haber usado Fragmentos desde el principio. Solo estaba siguiendo el tutorial Tab en la documentación de Android y trabajando desde allí)

Actualmente tengo un TabHost implementado con 3 pestañas cada una que contiene una actividad separada. Mi pregunta es cómo puedo alternar entre pestañas dentro de una de las actividades que se encuentran dentro del host de pestañas. He buscado en todas partes y no he tenido éxito en encontrar una respuesta real a este problema.


Después de un largo tiempo de luchar contra este problema, he podido encontrar una solución para cambiar las pestañas cuando uso pestañas basadas en actividad.

En la clase de actividad para padres donde se creó el tabhost implementé un método como el siguiente:

public void switchTab(int tab){ tabHost.setCurrentTab(tab); }

Dentro de la pestaña que me gustaría poder cambiar internamente a otra pestaña, creé el siguiente método:

public void switchTabInActivity(int indexTabToSwitchTo){ MintTrack parentActivity; parentActivity = (MintTrack) this.getParent(); parentActivity.switchTab(indexTabToSwitchTo); }

Si desea un buen ejemplo de este código, puede echar un vistazo a mi proyecto MintTrack here y here .

Como nota al margen, tenga mucho cuidado al decidir si usar TabHost basado en vista o actividad.

Activity pestañas basadas en Activity son geniales porque pueden separarse en su propio archivo XML. Las actividades también pueden organizarse en su propio archivo Java en lugar de estar desordenado en uno. Dicho esto, algunas de las cosas que usted pensaría serían fáciles de complicar con pestañas basadas en actividades. Es difícil pasar información entre pestañas sin crear sobrecarga. Activity pestañas basadas en Activity también usan más tiempo de memoria / CPU ya que tienen la sobrecarga de la Activity alrededor de cada una de ellas. Considere esto y los muchos intercambios antes de sumergirse en el uso de un TabHost basado en TabHost . Ahora sé que personalmente iría con un TabHost basado en TabHost si alguna vez los utilizo de nuevo.


Me encontré con el mismo problema. Si bien una sola actividad para todas las pestañas sería mejor, a veces tomar la salida más fácil es la elección racional.

Para evitar crear una nueva actividad de pestañas cuando una pestaña desea cambiar a otra pestaña, puse esto en mi AndroidManifest.xml:

<activity android:name=".MyTabsActivity" android:label="Tabs!" android:launchMode="singleTask">

Envíe un intento con la pestaña que desea:

class OneTabContentActivity { void switchTab() { final Intent intent = new Intent(mContext, MyTabsActivity.class); intent.setAction("Switch to tab 1, please"); mContext.startActivity(intent); } class MyTabsActivity { @Override protected void onNewIntent (Intent intent) { super.onNewIntent(intent); getTabHost().setCurrentTab(1); } }

Esta solución tiene inconvenientes, pero no tengo claro los detalles. Alguien más podría saber lo suficiente como para señalarlos.


Paso # 1: Reemplaza las pestañas-holding-activities con pestañas- setContent() -views usando una mejor forma de setContent() en TabSpec

Paso # 2: llama a setCurrentTab() en tu TabHost desde tu única Activity

Aún no he visto ningún beneficio de tener una Activity como el contenido de una pestaña en lugar de una simple View . Tener una Activity como contenido de la pestaña desperdicia tiempo y memoria de la CPU (y, por lo tanto, la duración de la batería) y hace las cosas como si estuvieras tratando de hacerlo mucho más difícil.


Primero, establezco un método para mi clase principal, que amplía TabActivity, llamémoslo "MainActivity"

public TabHost getMyTabHost() { return tabHost; }

Luego, agrego mi clase de actividad de pestañas;

MainActivity ta = (MainActivity) this.getParent(); TabHost th = ta.getMyTabHost(); th.setCurrentTab(0);

Funcionó para mí


Tuve un problema ligeramente diferente y pensé que agregaría esto a cualquier persona que se enfrente a una situación similar. Tengo una aplicación con pestañas basada en actividades y una de las actividades de pestañas inicia otra actividad que no está controlada por el tabHost. Necesitaba tener un botón en esta actividad finish () (es decir, regresar a la vista principal de la pestaña) y cambiar a una pestaña diferente al mismo tiempo.

Decidí manejarlo con un BroadcastReceiver. En la clase que configura el TabHost, agregué esta clase:

class ChangeTabReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "ChangeTabReceiver: received"); TabHost tabHost = getTabHost(); tabHost.setCurrentTab(1); } }

..then definió los vars:

ChangeTabReceiver changeTabReceiver; IntentFilter changeTabFilter;

..then agregado a onCreate ():

changeTabReceiver = new ChangeTabReceiver(); changeTabFilter = new IntentFilter(myApplication.CHANGE_TAB); registerReceiver(changeTabReceiver, changeTabFilter);

Finalmente, en la actividad nueva cuando desee cerrar esa actividad y cambiar las pestañas, haga esto:

Intent intent = new Intent(myApplication.CHANGE_TAB); this.sendBroadcast(intent); this.finish();

Por supuesto, podría hacer un método para cambiar a varias pestañas pasando el índice de pestañas, pero en mi caso, este comportamiento solo ocurre en una actividad, así que decidí mantenerlo simple ...


public void switchTab(int index){ MintTrack ParentActivity; ParentActivity = (MintTrack) this.getParent(); ParentActivity.getTabHost().setCurrentTab(index); }