Muchas veces cuando estamos realizando nuestra aplicación Android y tenemos varias actividades,
es necesario que estas se comuniquen entre sí, es decir, necesitamos pasar
información de una actividad a otra.
Para realizar esta comunicación, en la actividad origen tenemos que crear un objeto Intent y a este le añadimos las variables u objetos que queremos
pasar a la actividad destino.
Intent intent
= new Intent(MainActivity.this, ActividadDestino.class);
   intent.putExtra("nombre", “empezandoenesto”);    
   intent.putExtra("edad", 35);      
   startActivity(intent);
El código anterior como veis es muy simple e intuitivo.
En el constructor del objeto Intent simplemente le pasamos el contexto de la actividad origen MainActivity.this y la actividad que
queremos lanzar ActividadDestino.class (fijaros que le
pasamos el *.class)
Por último lanzamos el Intent
con startActivity(intent);
Si esperamos una
respuesta por parte de ActividadDestino en lugar de lanzar nuestro Intent con startActivity(intent) debemos hacerlo con startActivityForResult(intent, RESULT_CODE)
donde el primer argumento es el Intent
que queremos lanzar y el segundo es un número
entero que lo identifica. Para el ejemplo anterior nos quedaría algo así.
Intent intent
= new Intent(MainActivity.this, ActividadDestino.class);
   intent.putExtra("nombre", “empezandoenesto”);
   intent.putExtra("edad", 35);
   startActivityForResult(intent,
1234);
Para recuperar la información, en la actividad destino, es
necesario crear un objeto Bundle,
para ello recuperamos el Intent que
lanzó la actividad con el método getIntent()
y recuperamos el mapa el mapa de datos de la intención con getExtras()
Bundle extras
= getIntent().getExtras();
   String s = extras.getString("nombre");
   int i = extras.getInt("edad")
En las siguientes líneas de código, se recuperan las
variables de la intención utilizando uno de los métodos que nos ofrece la clase
Bundle; dependiendo del tipo de la
variable que vamos a recuperar utilizaremos un método u otro. Le pasaremos como
argumento el nombre que le pusimos a la variable en la actividad lanzadora. En
este caso se utilizan los métodos getString()
y  getInt()
En el caso de que queramos devolver alguna información a la
actividad origen tenemos que crear un nuevo Intent, pero esta vez la actividad 
            Intent intent = new Intent();
         intent.putExtra("nombre", "empezandoenesto");
         setResult(RESULT_OK,
intent);
         finish();
Para recuperar la información que nos devuelve la clase ActividadDestino en MainActivity tenemos que sobrescribir
el siguiente método.
       @Override
       public void onActivityResult(int requestCode, int resultCode, Intent data){
         super.onActivityResult(requestCode, resultCode, data);
         if(requestCode == 1234 && resultCode == Activity.RESULT_OK){
            String
nombre = data.getExtras().getString("nombre");
         }
      }
En la próxima entrada explicaré como se pasan objetos creados por nosotros entre actividades.
 
No hay comentarios:
Publicar un comentario