Sous Android, il est possible de faire passer des données d'une Activité à une autre en utilisant :
Intent intent = new Intent(this, ClassB.class);
intent.putExtra(Key, VALUE);
startActivity(intent);
Cependant VALUE peut être int, String, Boolean... mais ne peut être un objet.
Un moyen simple pour rendre possible la communication d'objets entre les Activités est d'implémenter, au niveau de la classe de l'objet, l'interface Parcelable
public class ParcelableObject implements Parcelable
Ajouter un constructeur prenant comme paramètre un Parcel
Ajouter une méthode qui va écrire l'objet en Parcel
Remarque très importante : L'ordre d'écriture dans le Parcel doit être le même au niveau de la lecture. Dans notre cas nom -> prenom -> mail -> estEtudiant ->age
Et enfin créer un Parcelable.Creator
public ParcelableObject(Parcel in) {
nom = in.readString();
prenom = in.readString();
mail = in.readString();
boolean droits[] = new boolean[1];
in.readBooleanArray(droits);
estEtudiant = droits[0];
age = in.readInt();
}
Ajouter une méthode qui va écrire l'objet en Parcel
@Override
public void writeToParcel(Parcel
dest, int flags) {
dest.writeString(nom);
dest.writeString(prenom);
dest.writeString(mail);
boolean droits[] = { estEtudiant };//Pour les boulean
on ne peut passer qu'un BooleanArray
dest.writeBooleanArray(droits);
dest.writeInt(age);
}
Remarque très importante : L'ordre d'écriture dans le Parcel doit être le même au niveau de la lecture. Dans notre cas nom -> prenom -> mail -> estEtudiant ->age
Et enfin créer un Parcelable.Creator
public static final Parcelable.Creator CREATOR = new Parcelable.Creator()
{
public
ParcelableObject createFromParcel(Parcel in) {
return new
ParcelableObject(in);
}
public
ParcelableObject[] newArray(int size) {
return new
ParcelableObject[size];
}
};
Au niveau de l'ActivitéA nous aurons :
ParcelableObject object = new ParcelableObject("Farouk", "f.ferjani.farouk@gmail.com", "FERJANI", false, 24);
Intent intent = new Intent(this, ClassB.class);
intent.putExtra(Key, object);
startActivity(intent);
Au niveau de l'ActivitéB nous aurons :
Codecomplet de la classe ParcelableObject
Au niveau de l'ActivitéB nous aurons :
Bundle
extras = getIntent().getExtras();
if (extras != null) {
ParcelableObject
doc = extras.getParcelable(Key);
}
package
com.example.tutoparcelable;
import android.os.Parcel;
import
android.os.Parcelable;
/**
* Document.
*
* @author Farouk
*
*/
public class ParcelableObject implements Parcelable {
private String nom = null;
private String prenom = null;
private String mail = null;
private int age;
private boolean estEtudiant;
public ParcelableObject(final String
prenom, final String mail,
final String nom, final boolean estEtudiant, final int age) {
this.prenom = prenom;
this.nom = nom;
this.mail = mail;
this.age = age;
this.estEtudiant =
estEtudiant;
}
public ParcelableObject(Parcel in) {
readFromParcel(in);
}
public final String getNom() {
return nom;
}
public final String getPrenom() {
return prenom;
}
public final String getMail() {
return mail;
}
public final int getAge() {
return age;
}
public final boolean isEtudiant() {
return estEtudiant;
}
@Override
public void writeToParcel(Parcel
dest, int flags) {
dest.writeString(nom);
dest.writeString(prenom);
dest.writeString(mail);
boolean droits[] = { estEtudiant };//Pour les boulean
on ne peut passer qu'un BooleanArray
dest.writeBooleanArray(droits);
dest.writeInt(age);
}
private void readFromParcel(Parcel in) {
nom = in.readString();
prenom = in.readString();
mail = in.readString();
boolean droits[] = new boolean[1];
in.readBooleanArray(droits);
estEtudiant = droits[0];
age = in.readInt();
}
@SuppressWarnings("rawtypes")
public static final
Parcelable.Creator CREATOR = new Parcelable.Creator() {
public
ParcelableObject createFromParcel(Parcel in) {
return new
ParcelableObject(in);
}
public
ParcelableObject[] newArray(int size) {
return new
ParcelableObject[size];
}
};
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
}
Aucun commentaire:
Enregistrer un commentaire