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:
//... //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); }
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:
//... 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"); }
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)
Y como pasar la referencia de una clase:
Gato cat=new Gato();
……
y en la activity recibirla….
public void setGato(Gato ca)
{
…
}