我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
当前回答
我找到了最简单的方法来创建Parcelable类
其他回答
我找到了最简单的方法来创建Parcelable类
现在,您可以使用Parceler库将任何自定义类转换为parcelable。只需用@Parcel注释POJO类。 如。
@Parcel
public class Example {
String name;
int id;
public Example() {}
public Example(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() { return name; }
public int getId() { return id; }
}
你可以创建一个Example类的对象,并通过包裹进行包装,并通过intent将其作为一个bundle发送。如
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
现在要获得自定义类对象只需使用
Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));
将: bundle.putSerializable(“关键”,(序列化)对象);
得到: List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
Android parcable有一些独特之处。这些因素如下:
你必须读包裹作为相同的顺序,你把数据包裹。 从包裹中读取包裹后,包裹将被清空。如果您的包裹上有3个数据。然后在阅读3次后包裹将是空的。
例子: 要使一个类成为Parceble,它必须实现Parceble。Percable有2种方法:
int describeContents();
void writeToParcel(Parcel var1, int var2);
假设你有一个Person类,它有三个字段,firstName,lastName和age。实现了Parceble接口后。该接口如下所示:
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable{
private String firstName;
private String lastName;
private int age;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(firstName);
parcel.writeString(lastName);
parcel.writeInt(age);
}
}
这里的writeToParcel方法是按顺序在Parcel上写入/添加数据。在这之后,我们必须添加下面的代码从包裹读取数据:
protected Person(Parcel in) {
firstName = in.readString();
lastName = in.readString();
age = in.readInt();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
在这里,Person类在写入过程中以相同的顺序获取一个包裹和数据。
现在在意图getExtra和putExtra代码给出如下:
多放些:
Person person=new Person();
person.setFirstName("First");
person.setLastName("Name");
person.setAge(30);
Intent intent = new Intent(getApplicationContext(), SECOND_ACTIVITY.class);
intent.putExtra()
startActivity(intent);
得到额外的:
Person person=getIntent().getParcelableExtra("person");
完整的人类给出如下:
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable{
private String firstName;
private String lastName;
private int age;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(firstName);
parcel.writeString(lastName);
parcel.writeInt(age);
}
protected Person(Parcel in) {
firstName = in.readString();
lastName = in.readString();
age = in.readInt();
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
Hope this will help you
Thanks :)
1. 导入Android Parcelable代码生成器
2. 创建类
public class Sample {
int id;
String name;
}
3.从菜单生成> Parcelable
完成了。