Hace unos días estaba implementando una lista genérica en Android para mostrar estadísticas. Para hacerlo necesitaba pasar al Activity que contenía la lista genérica una lista de objetos con la información de cada item de la estadística.

El paso de parámetros de tipos simples en Android es sencillo. Tenemos que establecer en nuestro objeto Intent los parámetros que queremos pasar con el método putExtra(String nombreParametro, String valorParametro). Este método está dsiponible para pasar además de String todos los tipos básicos int, long, float… así como arrays de los mismos.

En la pantalla que llama:

En la pantalla que recibe el parámetro:

Pero, ¿cómo se pasa un objeto o un array de objetos desde una pantalla a otra?




Para pasar objetos con la clase Intent nuestro objeto debería implementar la interfaz java.io.Serializable así como todos los objetos que contenga. Hacer esto es posible pero no es muy recomendable de cara al rendimiento.

Por suerte Android dispone de la intefaz Parcelable, con la que los programadores podemos indicar cómo serializar nuestros objetos y es un método más eficiente de cara al rendimiento de nuestra aplicación. A continuación os muestro la implementación del objeto que quiero serializar y posteriormente os explicaré con detalle los pasos que he tenido que hacer para conseguirlo:

Implementar Interfaz


Primero debemos implementar de la interfaz android.os.Parcelable.

Creamos un constructor especial

Creamos un constructor pasándole como parámetro un objeto de tipo android.os.Parcel. Este objeto será un contenedor de nuestro objeto. Será el objeto del cual recuperamos nuestros datos en la pantalla destino. 



IMPORTANTE!!: Crear atributo estático CREATOR

Debemos crear un atributo de tipo static llamado CREATOR de la clase Parcelable.CREATOR. El objeto debe ser similar a esto:


Implementar métodos abstractos

Por último debemos implementar los métodos abstractos de la interfaz Parcelable. El primero es int describeContents() el que podemos implementar devolviendo un 0. El segundo es writeToParcel(ParcelDest dest, int flags). En este método es donde rellenamos todos los campos de nuestro objeto para enviarlo desde una pantalla determinada.

Ahora ya tenemos nuestro objeto preparado para enviarlo de una pantalla a otra. Desde la pantalla que llama construiremos una lista de objetos de tipo EstadisticaItem (el objeto que quiero pasar) y lo pasaremos mediante el método de la clase Intent putParcelableArrayListExtra.

Desde mi lista genérica que hereda de ListActivity (aunque esto es extensible a cualquier Activity), lo único que tendré que hacer es recoger el parámetro ‘lista’ con getIntent().getExtras().

Si queremos recuperar un objeto normal en lugar de un objeto de tipo lista deberíamos utilizar el método getParcelable(String key).

Espero que el pequeño tutorial os sea útil en la implementación de vuestras aplicaciones Android.

Un saludo.