Activities. Llamar a otra activity y esperar respuesta

Submitted by tech4life on

En algunas ocasiones, cuando desde nuestra activity llamamos a otra activity esperamos que esta segunda nos devuelve algún resultado o valor. En estos casos, existe una manera sencilla de hacer que es mucho más óptima que llamar a la segunda actividad y desde la segunda actividad llamar a la primera, puesto que esto nos llenará la pila de activities. 

Al crear nuestro proyecto tenemos nuestra MainActivity y creamos una segunda actividad que se llamará SegundaActivity.

Para ejecutar la segunda activity en este caso utilizaremos el siguiente código :

Intent intent = new Intent(this, segundaActivity.class);
intent.putExtra("MI_CLAVE", "MI TEXTO");
startActivityForResult(intent, "MI_PETICION");

Por un lado creamos el intent igual que siempre, indicándole que activity queremos abrir. En este caso en el intent le hemos añadido un valor para pasarlo.

Por último llamamos a la función startActivityForResult, en la que le pasamos el intent y un valor que indicará el intent que estamos ejecutando en este momento, porque podemos tener más de una llamada distinta y necesitamos poderlas diferenciar.

En nuestra SegundaActivity, cuando queramos finalizar la activity deberemos poner el siguiente código : 

Intent replyIntent = new Intent();
replyIntent.putExtra("MI_RESPUESTA", "VALOR DE RESPUESTA");
setResult(RESULT_OK, replyIntent);
finish();

En este caso creamos un intent, y le ponemos un valor extra como respuesta. El siguiente paso es indicarle que resultado ha tenido el activity (setResult), en este caso le decimos que ha ido RESULT_OK y le pasamos el intent. Por último llamamos a la función finish para cerrar el activity y volver a la activity anterior.

Por último volvemos a la MainActivity para añadir el código para la respuesta. Debemos añadir el siguiente snippet :

@Override
 public void onActivityResult(int requestCode,
                              int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (requestCode == "MI_PETICION") {
         if (resultCode == RESULT_OK) {
             String reply =  data.getStringExtra("MI_RESPUESTA");
         }
     }
 }

Esta función es la que se ejecutará cuando se cierra la segunda activity y se cierre, porque al llamarla la habíamos llamado con el startActivityForResult.

Lo primero que debemos hacer es llamar a la clase del super. Lo siguiente es evaluar el requestCode, ya que desde nuestra activity podríamos llamar a distintas activities en función de alguna acción del usuario. En este caso evaluamos requestCode con el valor que le hemos indicado antes. 

El siguiente paso es comprobar el resultCode, que es el que hemos indicado en la segundaActivity. Una vez hecho esto ya podemos recoger el valor que le hemos puesto en el intent de la segunda Activity.

Una vez tenemos el valor ya podemos hacer con él lo que queramos.

Lenguaje
Nivel