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

  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

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 PagerView entre las actividades
  • Android - Cómo cerrar una actividad en el botón de clic?
  • Implícita vs intención explícita en Android (startActivity (intención) se bloquea)
  • ¿Qué sucede con la pila trasera al volver a abrir una actividad cuando launchMode = "singleTask"?
  • Pase entre actividades
  • Android Cómo pasar LinkedHashMap entre las actividades?
  • Cambios de orientación de orientación de Android onCreate
  • Iniciar siempre una nueva instancia de actividad sin historial
  • StartActivity () de BroadcastReceiver
  • Mostrar actividad como ventana de superposición en tabletas
  • FLAG_ACTIVITY_CLEAR_TOP?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.