2009-01-16 21 views
78

Tengo una pregunta sobre el lanzamiento de nuevas actividades. Todo se reduce a esto. tengo 3 lengüetas en una vistaAndroid: capturar el retorno de una actividad

A) contains gMap activity 
B) camera activity 
C) some random text fields. 

requisito es que la aplicación se ejecuta en modo vertical.

Las 3 pestañas funcionan como se esperaba con la excepción de la superficie de vista previa de la cámara (B). Se gira 90 grados. La única forma de hacerlo correcto es configurar la aplicación en el paisaje que arroja todas mis pestañas, y es prácticamente inviable.

Mi solución es la siguiente: reemplazar

mi actividad de la cámara con una actividad regular que está vacía w/excepción de

Intent i = new Intent(this,CameraActivity.class); 
    startActivity(i); 

Esto inicia mi CameraActivity. Y eso funciona bien. Tuve que hacer un diseño lineal e incluir 3 imágenes que se parecen a las pestañas reales, por lo que puedo intentar e imitar el funcionamiento de las pestañas mientras gire la pantalla hacia el paisaje y mantenga las imágenes como retrato. El usuario puede hacer clic en una de las imágenes (botones) para visualizar la siguiente pestaña. Este es mi problema. Debería salir de mi "actividad de la cámara" volviendo a la "actividad en blanco" en una pestaña, donde debe interpretarse que haga clic en la pestaña designada de mi imagen.

Lo principal es que, cuando vuelve, vuelve a una página en blanco (negra) debajo de una pestaña (porque está 'vacía'). ¿Cómo puedo capturar el evento de devolución en la página que llamó a la actividad y luego ver qué acción realizaron?

Puedo configurar un onclicklistener donde puedo responder a las pestañas falsas (imágenes) en las que se hace clic para salir de la actividad de la cámara. Al salir, la pestaña debe actualizarse para que regrese. ¿alguna sugerencia?

Gracias,

Respuesta

155

voy a centrarse en la respuesta a cómo resolver su workround para que se comporte como desee.

Para capturar acciones realizadas en una actividad dentro de otra requiere tres pasos.

Inicie la actividad secundaria (su 'actividad de cámara') como una subactividad utilizando startActivityForResult en lugar de startActivity.

Intent i = new Intent(this,CameraActivity.class);  
startActivityForResult(i, STATIC_INTEGER_VALUE); 

Dentro de la subactividad (Actividad de la cámara), en lugar de cerrar la actividad cuando un usuario hace clic en la imagen diferente pestaña, es necesario crear una nueva Intención e incluyen el índice de la ficha para mostrar cuando vuelva a la aplicación principal usando el paquete de extras. Para devolverlo a la llamada principal, llame al setResult antes de llamar al finish para cerrar la Actividad de la cámara.

resultIntent = new Intent(null); 
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, tabIndexValue); 
setResult(Activity.RESULT_OK, resultIntent); 
finish(); 

El paso final es la actividad de llamadas, anular onActivityResult para escuchar las devoluciones de llamada de la Actividad de la cámara. Obtenga el extra del Intento devuelto para determinar el índice de la pestaña que debe mostrar.

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) { 
    case (STATIC_INTEGER_VALUE) : { 
     if (resultCode == Activity.RESULT_OK) { 
     int tabIndex = data.getIntExtra(PUBLIC_STATIC_STRING_IDENTIFIER); 
     // TODO Switch tabs using the index. 
     } 
     break; 
    } 
    } 
} 
+3

¿Por qué se enciende el requestCode y luego se verifica si requestCode == RESULT_OK? Editar: No importa, veo la diferencia requestCode/resultCode. – varikin

+1

¿puedo hacer esto con un 'AsynkTask' como * segunda actividad *? –

Cuestiones relacionadas