2011-02-11 19 views
8

Mi pila de actividades es A B C, con C en la parte superior. A comenzó B utilizando startActivityForResult().FLAG_ACTIVITY_CLEAR_TOP y onActivityResult

Ahora, en C, se inicia una y borra la parte superior utilizando el siguiente código:

 finish(); 

     intent = new Intent(this, A.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 

Mi pregunta es, onActivityResult() en un ser llamado después de que el código se ejecuta por encima? Esperé que así sea, porque B se destruye después de que C inicia A y despeja la parte superior. Pero, mi código de prueba mostró que onActivityResult() en A no fue llamado. Estoy confundido. ¿Alguien puede ayudar?

Gracias.

+0

Kai, los documentos de CLEAR_TOP dicen "todas las demás actividades encima de ella se cerrarán y este Intención será entregado a la actividad anterior (ahora en la parte superior) como un nuevo Intento ". Sin embargo, sospecho que "cerrado" es una mala elección de palabras en el documento ... Android normalmente no 'cierra' Actividades a menos que la memoria lo exija o lo llamen finish(). Esto puede requerir algunas pruebas. Estoy interesado en ver lo que encuentras. – DJC

Respuesta

3

En su código está iniciando una nueva Actividad A, desde ACTIVIDAD C. Esto no llamará a onActivityResult. Esto simplemente porque se inició nueva actividad A. onActivityResult() se invocará solo cuando termine() su Acitivity B.

Espero que alguien agregue más a los indicadores, si esto no lo deja claro.

+0

onActivityResult() se llamará cuando salga una actividad que haya iniciado, proporcionándole el requestCode con el que comenzó, el resultCode que devolvió y cualquier dato adicional. El resultado será RESULT_CANCELED si la actividad ha sido devuelta explícitamente, didn ' t devuelve cualquier resultado, o se cuelga durante su operación. "El documento no dice onActivityResult() depende de finish(). – Kai

+0

prácticamente puede salir de la actividad llamando al final(). Y eso es lo que significa el doc como yo lo entiendo. Y al llamar a la Actividad A de la Actividad C con CLEAR TOP va a crear nuevamente la Actividad A a menos que su actividad A tenga el modo de inicio establecido en SINGLE TOP. Por lo tanto, creo que lo que quiere no es posible. Y pls actualice si encuentra una solución a esto. Gracias – Varun

0

intente configurar launchMode de su Activity A con el valor "singleTask", o use su marca FLAG_ACTIVITY_CLEAR_TOP junto con FLAG_ACTIVITY_NEW_TASK. de forma predeterminada, launchMode de Activity A es estándar, luego se creará una nueva instancia de A cuando inicie A desde C.

Cuestiones relacionadas