LES PARCELABLES Comment passer un objet entre des activity? Passer des données entre des activités est très facile sous Android. Normalement on utilise les Bundles. Mais que se passe -t-il quand on veut envoyer des objets complexes d une activité à une autres? Le système basé sur les Parcels est utilisé nativement par Android, il transforme des objets en Parcel, ce qui permet de passer des informations entre les activités. On peut dire que c est l équivalent de la sérialisation pour le passage d objet entre différentes activités ou différents processus (IPC Inter-Process Communication). Pour pouvoir passer un objet complexe en utilisant le Bundle, il suffit que la classe représentant votre objet implémente l interface Parcelable. Dans ce cas nous avons les 2 méthodes de l interface a implémenter : describecontents : Sert à décrire le contenu de notre Parcel et plus précisément le nombre d objet spéciaux contenus dans votre Parcel writetoparcel : Sert à écrire l objet dans un Parcel. Exemple : public class Personne implements Parcelable{
La méthode writetoparcel nous permet d ecrire les attributs de notre objet Personne dans l objet parcel. public class Personne implements Parcelable{ Ensuite il est nécessaire de créer un objet CREATOR de la classe PARCELABLE, et un constructeur prenant en argument notre objet personne afin de pouvoir créer un objet Personne à partir d un parcel. public static final Parcelable.Creator<Personne> CREATOR=new Parcelable.Creator<Personne>(){ public Personne createfromparcel(parcel p){ return new Personne(p); public Personne[] newarray(int size){ return new Personne[size]; ; public Personne(Parcel in){ this.prenom=in.readstring();
this.nom=in.readstring(); this.email=in.readstring(); this.adresse=in.readstring(); this.datenaissance=in.readstring(); Exemple de cas dans une activity Activiteprincipale : protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_activite_principale); //instanciation de personne Personne pers=new Personne("Valjean","Jean@free.Fr","1 bd Victor Hugo 44000 Nantes","10/06/1964","Jean"); SecondeActivite : //declaration de l'intent Intent i=new Intent(ActivitePrincipale.this,SecondeActivite.class); //Ajout de l'objet personne dans l'intent i.putextra("personne",pers); startactivity(i); protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_seconde_activite); TextView montexte=(textview) findviewbyid(r.id.texte); //récupération de l'intent de la 1ere activity Intent x=getintent(); //récupération du bundle de l'activity Bundle y=x.getextras(); //recuperation de l'objet Personne Personne pers=y.getparcelable("personne"); String txt=""; txt+="nom: "+pers.getnom()+"\n"; txt+="prenom: "+pers.getprenom()+"\n"; txt+="email: "+pers.getemail()+"\n"; txt+="adresse: "+pers.getadresse()+"\n"; txt+="date de naissance: "+pers.getdatenaissance()+"\n"; //affectation de txt au TextView montexte.settext(txt); Classe personne.java :
public class Personne implements Parcelable{ public static final Parcelable.Creator<Personne> CREATOR=new Parcelable.Creator<Personne>(){ public Personne createfromparcel(parcel p){ return new Personne(p); public Personne[] newarray(int size){ return new Personne[size]; ; public Personne(Parcel in){ this.prenom=in.readstring(); this.nom=in.readstring(); this.email=in.readstring(); this.adresse=in.readstring(); this.datenaissance=in.readstring(); public String getprenom() { return prenom;
public void setprenom(string prenom) { public String getnom() { return nom; public void setnom(string nom) { public String getemail() { return email; public void setemail(string email) { public String getadresse() { return adresse; public void setadresse(string adresse) { public String getdatenaissance() { return datenaissance; public void setdatenaissance(string datenaissance) {