2010-07-16 14 views
15

Estoy en la fase de conceptualización/diseño de la creación de una aplicación y me he topado con un pequeño inconveniente. Básicamente, estaba buscando una forma de insertar una actividad en la UI de otra similar a como una TabHost/TabActivity. Habría una ventana en la parte superior de la pantalla que contendría la otra actividad, y debajo de eso aparecerían botones y controles que son independientes de la actividad anterior y siempre deberían estar visibles. El usuario podría navegar de una actividad a otra en la ventana sin causar ningún cambio en los controles a continuación.android: usando ActivityGroup para incrustar actividades

Mientras investigaba el problema me encontré con ActivityGroup, que parecía que sería útil, pero ¿cómo lo implementaría? ¿Alguien tiene experiencia con ActivityGroup o tiene otra idea?

Respuesta

19

Sí, implementaría un ActivityGroup, que será el contenedor de sus otras actividades. Cuando el usuario hace clic en uno de los botones, obtendría una referencia al LocalActivityManager, y lo usaría para iniciar e incrustar la actividad interna. Algo como esto:

LocalActivityManager mgr = getLocalActivityManager(); 

Intent i = new Intent(this, SomeActivity.class); 

Window w = mgr.startActivity("unique_per_activity_string", i); 
View wd = w != null ? w.getDecorView() : null; 

if(wd != null) { 
    mSomeContainer.addView(wd); 
} 

Nota, el uso de este método puede ser bastante complicado, porque a menos que el foco es la correcta, al pulsar los botones de hardware (como el botón de menú) Sólo se desencadenan eventos en el ActivityGroup en lugar de la Actividad interna. Debe encontrar una forma de enfocar la actividad interna después de agregarla a la vista del contenedor, momento en el que ocurrirá la actividad interna y se propagará a la actividad del contenedor.

Se puede hacer, lo he hecho ... y funciona. Es un poco más complicado de lo que creo que debería ser.

De todos modos, tengo la mayor parte de esta información por mirar el código TabHost, que se puede encontrar here

+0

oh genial, estaba buscando el código fuente de tabhost. esto se ve bien, pero todo es nuevo para mí. ¿Te importa dar alguna explicación de lo que estás haciendo en tu ejemplo de código? – mtmurdock

+1

la parte startActivity solo inicia la actividad sin mostrarla en pantalla. Luego obtienes la Vista que tiene todos los contenidos y la agregas a una Vista que está dentro de tu ActivityGroup. LocalActivityManager lo gestiona todo, como enviar OnPause y onResume a tus actividades internas cuando presionas el botón de inicio y tal – synic

+0

una cosa más: ¿qué es este objeto de "ventana" y cómo se implementa? ¿Puedo poner una etiqueta '' en el diseño donde quiero que vaya y luego asignarlo en el código? ps gracias, eres increíble. – mtmurdock

Cuestiones relacionadas