Android bietet einen Typ: Paket. Es wird als Container zum Kapseln von Daten verwendet. Die gekapselten Daten können über Intent oder IPC bereitgestellt werden. Zusätzlich zu den Basistypen können nur Klassen in Parcel eingefügt werden, die die Parcelable-Schnittstelle implementieren.
Kernpunkte der Parcelable-Implementierung: Drei Dinge müssen implementiert werden
1) writeToParcel-Methode. Diese Methode schreibt die Daten der Klasse in ein extern bereitgestelltes Parcel. Sie wird wie folgt deklariert:
writeToParcel (Paketziel, int-Flags) Spezifische Parameterbedeutungen finden Sie in Javadoc
2) writeContents-Methode. Ich verstehe den Nutzen nicht. Wie auch immer, Sie können einfach 0 zurückgeben.
3) Statische Parcelable.Creator-Schnittstelle. Diese Schnittstelle verfügt über zwei Methoden:
createFromParcel(Parcel in) implementiert die Funktion zum Erstellen einer Instanz der Klasse aus in
newArray(int size) erstellt ein Array vom Typ T und der Länge size, nur ein Satz (return new T[size]) reicht aus. Es wird geschätzt, dass diese Methode von externen Klassen verwendet wird, um Arrays dieser Klasse zu deserialisieren.
Aktivität zum Empfangen von Informationen zum Testen:
import android.app.Activity; import android.os.Bundle; import android.os.Parcelable; public class Test changes ; setContentView(R.layout.main); Intent i = getIntent(); i.getParcelableExtra("yes"); System.out.println("---->"+p.name); System.out.println("---->"+p.map.size()) ; } }
Gesendete Aktivität:
import java.util.HashMap; import android.content.Intent; import android.os.Bundle; ; setContentView(R.layout.main); Intent intent = new Intent(); HashMap<String,String>(); p.map.put("yes", "ido"); p.name="ok"; .class); startActivity(intent);
Parcelable-Implementierungsklasse:
import java.util.HashMap; import android.os.Parcelable; public class Person implementiert Parcelable { public HashMap<String,String> (); @Override public int beschreibenContents() { 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) { Person p = new Person(); p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; @Override public Person[] newArray(int size) { // TODO Automatisch generierter Methoden-Stub return null }