每当我希望我的类实现Parcelable时,它总是归结为同样的事情。我的代码总是这样:
public class MyClass implements Parcelable{
private String stringA;
private int intA;
.
.
.
//## Parcelable code - START ################################
@Override
public int describeContents() {
return this.hashCode();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(stringA);
dest.writeInt(intA);
.
.
.
}
public static final Parcelable.Creator<MyClass> CREATOR = new Parcelable.Creator<MyClass>() {
@Override
public MyClass createFromParcel(Parcel in) {
return new MyClass(in);
}
@Override
public MyClass[] newArray(int size) {
return new MyClass[size];
}
};
public MyClass(Parcel in){
this.cancellationnote = in.readString();
this.intA = in.readInt();
.
.
.
}
//## Parcelable code - END ################################
}
但这非常重复,乏味且容易出错。有没有更简单的方法呢?
答案 0 :(得分:1)
使用&#34; Parcelabler &#34;有一种更简单的方法作者:Dallas Gutauckis。它会为您的班级自动生成代码:
但是,它并没有使代码更短。
答案 1 :(得分:0)
Android Studio 1.3现在有一个“快速修复”,可以为您的班级自动生成Parcelable实现。
然而,它仍然将所有样板代码放在你自己的类中(但我猜它没有办法解决它)。
答案 2 :(得分:0)
使用Parceler,您只需要使用@Parcel
注释您的bean,并在您希望将bean用作{{1}时使用Parcels
实用程序类来包装/解包}:
Parcelable
如果您使用默认的@Parcel
public class MyClass {
String stringA;
int intA;
}
封印策略,请务必将字段设为非私有字段。
Parcels实用程序类用法:
FIELD
要在Gradle中导入Parceler,请添加以下行以及apt plugin:
intent.putExtra("example", Parcels.wrap(myClass));
//...
Example example = MyClass .unwrap(getIntent().getParcelableExtra("example"));
在我的书中,这是在Android中使用Parcelables的最简单/最乏味的方法。