Comunicación entre actividades

Cuando una actividad ha de lanzar a otra actividad en muchos casos necesita enviarle cierta información.

video[Tutorial] Intercambio de datos entre actividades

Android nos permite este intercambio de datos utilizando el mecanismo que es descrito a continuación:

Cuando lances una actividad usa el siguiente código:

Intent intent = new Intent(this, MI_CLASE.class);
intent.putExtra("usuario", "Pepito Perez");
intent.putExtra("edad", 27);
startActivity(intent); 
val intent = Intent(this, MI_CLASE::class.java)
intent.putExtra("usuario", "Pepito Perez")
intent.putExtra("edad", 27)
startActivity(intent) 

En la actividad lanzada podemos recoger los datos de la siguiente forma:

Bundle extras = getIntent().getExtras();
String s = extras.getString("usuario");
int i = extras.getInt("edad"); 
val extras = intent.extras
val s = extras?.getString("usuario")?:"sin usuario"
val i = extras?.getInt("edad")?:-1 

Cuando la actividad lanzada termina también podrá devolver datos que podrán ser recogidos por la actividad lanzadora de la siguiente manera.

Intent intent = new Intent(this, MI_CLASE.class);
startActivityForResult(intent, 1234);
…
@Override protected void onActivityResult(int requestCode, int resultCode, 
                                          Intent data){
   if (requestCode==1234 && resultCode==RESULT_OK) {
      String res = data.getExtras().getString("resultado");
   }
} 
val intent = Intent(this, MI_CLASE::class.java)
startActivityForResult(intent, 1234)
…
override fun onActivityResult(requestCode: Int, resultCode: Int,
                              data: Intent?) {
   if (requestCode == 1234 && resultCode == Activity.RESULT_OK) {
      val res = data?.extras?.getString("resultado")?:"sin resultado"
   }
} 

En la actividad llamada has de escribir:

Intent intent = new Intent();
intent.putExtra("resultado","valor");
setResult(RESULT_OK, intent);
finish(); 
val intent = Intent()
intent.putExtra("resultado", "valor")
setResult(Activity.RESULT_OK, intent)
finish() 

Práctica: Comunicación entre actividades.

1.     Crea un nuevo proyecto con nombre ComunicacionActividades y tipo Empty Activity.

2.     El Layout de la actividad inicial ha de ser similar al que se muestra abajo a la izquierda.

3.   Introduce el código para que cuando se pulse el botón “Verificar” se arranque una segunda actividad. A esta actividad se le pasará como parámetro el nombre introducido en el EditText.

4.     El Layout correspondiente a la segunda actividad se muestra a la derecha.

5.    Al arrancar la actividad el texto del primer TextView ha de modificarse para que ponga “Hola ”+nombre recibido+”¿Aceptas las condiciones?”

6.    En esta actividad se podrán pulsar dos botones, de forma que se devuelva a la actividad principal el String “Aceptado” o “Rechazado”, según el botón pulsado. Al pulsar cualquier botón se regresará a la actividad anterior.

7.    En la actividad principal se modificará el texto del último TextView para que ponga “Resultado: Aceptado” o “Resultado: Rechazado”, según lo recibido.

Preguntas de repaso: Comunicación entre Actividades