Utilizando startActivityForResult, ¿cómo obtener requestCode en la actividad de un niño?
Tengo cuatro actividades, digamos A, B, C y D. Mi situación es A comenzará la actividad B por startActivityForResult.
startActivityForResult(new Intent(this,B.class),ONE);
En otra situación voy a B con otra situación. me gusta
- Filtro de intención: intent.getData () devuelve null
- La intención de la cámara o la galería destruye la actividad antigua en algunos dispositivos
- Android recibe el valor de onActivityResult y lo establece en un botón
- Error de sensorPortait
- ¿Cómo llamar a un método cada vez que se está viendo una actividad?
startActivityForResult(new Intent(this,B.class),TWO);
En B necesito comprobar que necesito llamar C o D dependiendo de requestCode. Es decir, si necesita iniciar C else D Entonces necesito saber a quién comprobar el requestCode en el niño Actividad (B aquí)
O en otras palabras, quiero obtener con qué código de solicitud B comenzó en la Actividad B
- Cambios de orientación de orientación de Android onCreate
- ¿Cómo excluir de una actividad exportada?
- Aplicación SIP para Android, cómo usar servicios y actividades
- ¿Cómo probar automáticamente que las aplicaciones se comportan como se espera con respecto a otras actividades?
- Eliminar una actividad de la pila en android
- Android deep linking - Pila trasera
- Android Parcelable Implementación con ArrayList <Object>
- ¿Cómo pasar datos de spinner de una actividad a otra?
Usted puede pasar el código de la petición por poner más.
intent.putExtra("requestCode", requestCode);
O si has utilizado startActivityForResult
muchas veces, entonces mejor que editar cada uno, puedes override
el startActivityForResult
en tu Activity
, startActivityForResult
código allí como este
@Override public void startActivityForResult(Intent intent, int requestCode) { intent.putExtra("requestCode", requestCode); super.startActivityForResult(intent, requestCode); }
Así que no hay necesidad de editar todo su startActivityForResult
Espero que te ayude
El código de solicitud no se pasa automáticamente a la actividad iniciada porque no necesita (y no debería) conocer este valor. Sólo necesita saber qué hacer y no de dónde se inició.
Iniciar una actividad es realmente sólo otra forma de llamar a un método. Cuando llama a un método, recibe el resultado de forma síncrona (allí mismo donde realizó la llamada). En este caso usted está pasando solamente en la información que el método necesita hacer su trabajo. No le estás diciendo de dónde lo llamaste.
Iniciar una actividad es el análogo asíncrono de llamar a un método, en cuyo caso recibirá el resultado en el método especial onActivityResult (). En este método, necesita saber qué hacer con el resultado que acaba de recibir y tiene el código de solicitud para esto.
Para que sea un poco más claro por qué no es una buena idea pasar el código de solicitud como un parámetro, considere la actividad de ejemplo que muestra un producto que puede comprar. En esta actividad hay dos botones etiquetados como "Comprar" y "Iniciar sesión" (ya que actualmente no está conectado). Al pulsar "Login" se iniciará una actividad llamada "Login" que intentará iniciar sesión en el usuario utilizando la información proporcionada. Al presionar "Comprar" se iniciará la misma actividad de "Inicio de sesión" y si el inicio de sesión se ha realizado correctamente, inicie la actividad de compra.
Ahora, el botón "Inicio de sesión" utiliza el código de solicitud 1 para iniciar la actividad de inicio de sesión, pero el botón "Comprar" no puede utilizar el mismo código de solicitud, ya que tendrá que hacer algo diferente si el inicio de sesión es correcto. Por lo tanto, el botón "Comprar" utiliza el código de solicitud 2.
En la actividad de "Inicio de sesión", es posible que reciba dos códigos de solicitud diferentes, dependiendo de dónde se llamó, pero deberá realizar el mismo procedimiento.
Por lo tanto, si pasa el código de solicitud como un parámetro, terminará con código que necesita hacer las mismas cosas para un par de diferentes códigos de solicitud, como:
if (requestCode == LOGIN || requestCode == BUY) { // ... } else ...
También terminará almacenando las constantes de código de solicitud en una ubicación central, por ejemplo, una clase llamada RequestCodes.
En resumen, el código de solicitud sólo debe utilizarse para decidir qué hacer con el resultado recibido. De esta manera usted terminará con un código más modular, más fácil de mantener y más fácil de extender.
Acabé usando la acción de intención personalizada para pasar este tipo de información a la actividad de lanzamiento.
protected static final String ACTION_DO_C = "do_c"; protected static final String ACTION_DO_D = "do_d";
Entonces usted iría como:
final Intent intent = new Intent(this,B.class) intent.setAction(ACTION_DO_C); startActivityForResult(intent,ONE);
Y en la Actividad B
obtienes la acción fácilmente:
getIntent().getAction();
- Android Gradle No se pudo reservar espacio suficiente para el montón de objetos
- "Error al entregar el resultado" – onActivityForResult