Android propose un type : Colis. Il est utilisé comme conteneur pour encapsuler les données. Les données encapsulées peuvent être fournies via Intent ou IPC. En plus des types de base, seules les classes qui implémentent l'interface Parcelable peuvent être placées dans Parcel.
Points clés de la mise en œuvre de Parcelable : trois choses doivent être mises en œuvre
1) Méthode writeToParcel. Cette méthode écrit les données de la classe dans un Parcel fourni en externe. Elle est déclarée comme suit :
writeToParcel (Parcel dest, int flags) Voir javadoc pour la signification spécifique des paramètres
2) méthode décrireContents. Je ne comprends pas à quoi ça sert. Quoi qu'il en soit, vous pouvez simplement renvoyer 0.
3) Interface statique Parcelable.Creator. Cette interface dispose de deux méthodes :
createFromParcel(Parcel in) implémente la fonction de création d'une instance de la classe à partir de in
newArray(int size) crée un tableau de type T et de longueur size, une seule phrase (retourner new T[size]) suffit. On estime que cette méthode est utilisée par des classes externes pour désérialiser les tableaux de cette classe.
Activité de réception d'informations pour les tests :
importer android.app.Activity ; importer android.content.Intent ; importer android.os.Bundle ; importer android.os.Parcelable ; public class Test extends Activity { @Override public void onCreate (Bundle savingInstanceState) { super.onCreate (savedInstanceState) ; setContentView(R.layout.main); Intention i = getIntent(); i.getParcelableExtra("oui"); System.out.println("---->"+p.name); System.out.println("---->"+p.map.size()) ; } }
Activité envoyée :
importer java.util.HashMap ; importer android.app.Activity ; importer android.content.Intent ; importer android.os.Bundle ; public class TestNew extends Activity { @Override public void onCreate (Bundle savingInstanceState) { super.onCreate (savedInstanceState) ; setContentView(R.layout.main); Intention intent = new Intent(); HashMap<String,String>(); p.map.put("oui", "ido"); p.name="ok"; intent.putExtra("oui", p); .class); startActivity(intention);
Classe d'implémentation parcellaire :
import java.util.HashMap; import android.os.Parcel; import android.os.Parcelable; public class Person implémente Parcelable { public HashMap<String,String> map = new HashMap<String,String> (); @Override public int décrireContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeMap(map); dest.writeString(name); } public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //Override Creator @Override public Person createFromParcel(Parcel source) { Personne p = new Person(); p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; } @Override public Person[] newArray(int size) { // TODO Stub de méthode généré automatiquement return null } };