、カスタムオブジェクトにParcelable
インタフェースを実装し、Intent
を介して送信します。
Parcelable
オブジェクトの例を次に示します。
public class MyObject implements Parcelable {
private String someString = null;
private int someInteger = 0;
public MyObject() {
// perform initialization if necessary
}
private MyObject(Parcel in) {
someString = in.readString();
someInteger = in.readInt();
}
public static final Parcelable.Creator<MyObject> CREATOR =
new Parcelable.Creator<MyObject>() {
@Override
public MyObject createFromParcel(Parcel source) {
return new MyObject(source);
}
@Override
public MyObject[] newArray(int size) {
return new MyObject[size];
}
};
// Getters and setters
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(someString);
dest.writeInt(someInteger);
}
}
ここでは何が起こりますか。 Parcelable
インターフェイスを実装する場合は、Parcel
をパラメータとして持つプライベートコンストラクタを作成する必要があります。そのParcel
はすべてのシリアル化された値を保持します。
ネストされたクラスParcelable.Creator
は、CREATOR
という名前で実装する必要があります。これは、オブジェクトを再作成するときにAndroidによって呼び出されるためです。
方法describeContents()
は、特別な場合にのみ使用します。戻り値は0
のままにしておくことができます。
興味深い動作はwriteToParcel()
で起こります。名前が示すように、あなたのデータはParcel
オブジェクトに書き込まれます。
この例のように、Intent
にカスタムオブジェクトを直接追加することができます。
MyObject myObject = new MyObject();
Intent i = new Intent();
i.setExtra("MY_OBJECT", myObject);
// implicit or explicit destination declaration
startActivity(i);
これは本当にうれしい説明ですが、ParcelableとApplicationクラスの使い分けが混乱しています。何をお勧めしますか? – Hunt
私はそれがユースケースに大きく依存していると思いますが、あなたのケースでは 'Parcelables'をお勧めします。 –
さて、私はかなり重いデータの使用を持っているので、私はパーセルブルと一緒に行くでしょう。 – Hunt