Android では、Parcel というタイプが提供されます。データをカプセル化するためのコンテナとして使用され、カプセル化されたデータは Intent または IPC を通じて配信できます。 基本型に加えて、Parcelable インターフェイスを実装するクラスのみを Parcel に含めることができます。
Parcelable 実装の重要なポイント: 実装する必要がある 3 つのこと
1) writeToParcel メソッド。このメソッドは、クラスのデータを外部で提供された Parcel に書き込みます。これは次のように宣言されます。
writeToParcel (Parcel dest、int flags) 特定のパラメータの意味については、javadoc を参照してください。
2) descriptionContents メソッド。用途がわかりませんが、とにかく 0 を返すだけです。
3) 静的 Parcelable.Creator インターフェイス。このインターフェースには 2 つのメソッドがあります。
createFromParcel(Parcel in) は、クラスのインスタンスを in から作成する関数を実装します。
newArray(int size) は型 T と長さ size の配列を作成します。たった 1 つの文 (return new T[size]) で十分です。このメソッドは、このクラスの配列を逆シリアル化するために外部クラスによって使用されると推定されます。
テスト用の情報を受信するアクティビティ:
インポート android.app.Activity; インポート android.os.Bundle; インポート android.os.Parcelable; パブリック クラス テストはアクティビティを拡張します { @Override public void onCreate(savedInstanceState) ; setContentView(R.layout.main); インテント i = getIntent(); i.getParcelableExtra("yes"); System.out.println("---->"+p.name); System.out.println("---->"+p.map.size()) ; } }
送信されたアクティビティ:
インポート java.util.HashMap; インポート android.app.Activity; インポート android.os.Bundle; パブリック クラス TestNew extends Activity { @Override public void onCreate(SavedInstanceState) ; setContentView(R.layout.main); インテントの意図 = 新しいインテント (); HashMap<String,String>(); p.map.put("yes", "ido"); p.name="ok"("yes", p); .class);
Parcelable 実装クラス:
import java.util.HashMap; import android.os.Parcelable; public class Person は Parcelable { public HashMap<String,String> マップ = new HashMap<String> (); @Override public int descriptionContents() { 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>() { //オーバーライド Creator @Override public Person createFromParcel(パーセル ソース) {人 p = 新しい人 () p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; } @Override public Person[] newArray(int size) { // 自動生成されたメソッド スタブ return null;