2011-02-03 8 views
5

Estoy tratando de hacer una aplicación que tenga 4 pestañas en la parte inferior de la pantalla.Iniciar otra actividad dentro de FrameLayout de TabActivity

Todos ellos contienen Actividad (Intención).

Y quiero navegar cualquiera de las actividades a otra actividad. Pero quiero mantener el TabWidget visible.

Avísame lo antes posible si lo sabes.


Shaiful

+0

Se requiere más información, no puede entender su pregunta. –

Respuesta

1

Esto se implementa en Tabs with multiple activities in a single tab.

Sin embargo, cuando se llaman actividades múltiples se produce el error StackOverFlow. Intenté muy duro pero no pude resolverlo. Por favor, alguien diga un método para resolver este problema

También es necesario reemplazar una actividad en una pestaña, Sin embargo, desde la actividad infantil. ¿Cómo se hace eso?

+0

Sin estar seguro, creo que el desbordamiento de pila ocurre después de haber cambiado muchas veces entre pestañas. Esto porque las actividades se administran utilizando una pila de actividades (ver http://developer.android.com/reference/android/app/Activity.html). Debe ser posible reemplazar la actividad ubicada en la parte superior de la pila por la recién llamada, en lugar de empujarla. Pero no estoy seguro de que este sea el mejor camino a seguir (esta es una pregunta real). – Shlublu

+1

Hola he encontrado la solución y se muestra a continuación –

1

En cualquier momento solo puede haber una actividad. Documentos sobre esto here

+1

Esto no es de ninguna ayuda aquí. – sulai

3

El problema de error que ocurre debido a la sustitución de actividades se puede resolver de la siguiente manera.

En primer lugar vamos a entender el flujo:

  1. Tenemos en una serie Tab, la actividad (por ejemplo una lista) de la que tenemos que ir a la siguiente actividad (digamos detalles para el elemento hecho clic) bajo la misma pestaña Para esto podemos usar el concepto de reemplazar la actividad. También estableciendo los indicadores para la pestaña seleccionada y otra para saber que los detalles se muestran ahora

  2. Cuando presionamos hacia atrás deberíamos obtener la actividad anterior bajo la misma pestaña. Para esto, en lugar de volver a reemplazar la actividad, podemos actualizar la pestaña mientras usamos el marcador en particular para la pestaña que se seleccionó. Además, si la bandera para mostrar detalles es verdad vamos a ir al la lista en la misma pestaña o de lo contrario vamos a ir a la actividad antes de la TabWidget (uso normal de onBackPressed)

El código puede ser de la siguiente manera ..

  1. para pasar de la lista a los detalles ...

(Esto puede ser en el OnClickListener)

private OnClickListener textListener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     Constants.SHOW_DETAILS = true; 
     Intent intent = new Intent(context, DetailsActivity.class); 
     replaceContentView("activity3", intent); 
     } 
}; 

public void replaceContentView(String id, Intent newIntent) { 
    View view = ((ActivityGroup) context) 
      .getLocalActivityManager() 
      .startActivity(id, 
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 
    ((Activity) context).setContentView(view); 

} 
  1. Cuando espalda pegada se realiza sobreescribimos en BackPressed en cada una de la Actividad de la pestaña para ir a la lista de nuevo desde la pantalla de detalles

    @Override 
        public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
    if (MathHelper.SHOW_DETAILS) { 
        Log.e("back", "pressed accepted"); 
        Constants.LIST_ACTIVITY = 1; 
        Constants.SHOW_DETAILS = false; 
        Intent intent = new Intent(this, Tab_widget.class); 
        startActivity(intent); 
        finish(); 
        } 
    } 
    

La parte más importante aquí es Constantes .LIST_ACTIVITY = 1; indica en qué pestaña nos encontramospor lo que las actividades correspondientes tendrán su valor como 0,1,2 ... etc

De nuevo para cargar la lista correcta (Activty) cuando la actividad de las pestañas se actualiza tenemos que incluir esto en el TabWidget onCreate después de la creación de las pestañas

tabHost.setCurrentTab(Constants.LIST_ACTIVITY); 
Cuestiones relacionadas