オブジェクトを Parcelable にしようとしています。ただし、カスタム オブジェクトがあり、それらのオブジェクトにはArrayList
私が作成した他のカスタム オブジェクトの属性があります。
これを行う最善の方法は何でしょうか?
ベストアンサー1
これに該当する例をいくつか挙げてみましょうここ、ここ(コードはここから取得)、 そしてここ。
このための POJO クラスを作成できますが、それを実現するには追加のコードを追加する必要がありますParcelable
。実装を見てみましょう。
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
このクラスを作成すると、このクラスのオブジェクトをIntent
次のように簡単に渡し、ターゲット アクティビティでこのオブジェクトを回復できます。
intent.putExtra("student", new Student("1","Mike","6"));
ここで、学生は、バンドルからデータを分解するために必要なキーです。
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
この例ではString
型のみを示しています。ただし、必要な種類のデータをパッケージ化できます。試してみてください。