Como pasar datos a otra Activity

Objetivo:

Pasar información de una a otra Activity.

Como siempre, tendremos varias alternativas para compartir datos entre las actividades de nuestra aplicación. En este post vamos a tratar una de las más simples: mediante objetos Bundle.

Esta no es la mejor alternativa si deseamos que la información permanezca en un futuro (tras cerrar la aplicación por ejemplo): en ese caso guardarlo en base de datos sería más útil.

Veamos un ejemplo rápido del uso de la clase Bundle. Pasaremos información de una actividad padre a una hija. El código pertenece a Cartelera de Cine, disponible en Android Market, y se pretende pasar la información de una lista de cines y películas de una actividad a otra :

Código fuente java Activity padre:

[sourcecode language=”java”]
//…
//variables que pasaremos a la activity hija
private List<Cine> lista_cines;
private List<Pelicula> lista_peliculas;
//…
/**
* Pasamos dichas variables a la activity hija, llamándola
*/
public void pasarActividadHija(){
//preparo la Intent
Intent itemintent = new Intent(this,activity_hija.class);
//paso la lista de peliculas y cines
itemintent.putExtra("lista_peliculas",(Serializable) this.lista_peliculas);
itemintent.putExtra("lista_cines",(Serializable) this.lista_cines);
//llamamos a la subactividad
startActivityForResult(itemintent, 0);
}
[/sourcecode]

La Activity hija recoge las listas pasadas por la Activity padre. En el método onCreate llamaremos a la función importarInformacion, la cual se encarga de ello:

Código fuente java Activity hija:

[sourcecode language=”java”]
//…
private List<Cine> lista_cines;
private List<Pelicula> lista_peliculas;
//…
/**
* importa la info de que le pasa la Actividad padre
*/
public void importarInformacion(){
Intent startingIntent = getIntent();
if (startingIntent != null) {
Bundle b = startingIntent.getBundleExtra("android.intent.extra.INTENT");
//recibimos la lista de cines
this.lista_cines = (List<Cine>)getIntent().getSerializableExtra("lista_cines");
//recibimos la lista de peliculas
this.lista_peliculas = (List<Pelicula>)getIntent().getSerializableExtra("lista_peliculas");
}
[/sourcecode]

Si lo que deseamos es compartir cadenas de texto, la clase Bundle posee métodos especiales: putString para meter en la instancia del Bundle la cadena (en la Activity padre), y getString para recuperarla (en la Activity hija)