Android - 实现Parcelable的更简单/更快/更乏味的方式?

时间:2013-12-04 04:30:32

标签: java android interface parcelable implements

每当我希望我的类实现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 ################################
    }

但这非常重复,乏味且容易出错。有没有更简单的方法呢?

3 个答案:

答案 0 :(得分:1)

使用&#34; Parcelabler &#34;有一种更简单的方法作者:Dallas Gutauckis。它会为您的班级自动生成代码:

http://www.parcelabler.com/

但是,它并没有使代码更短。

答案 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的最简单/最乏味的方法。