[Android] Android StudioでParcelableを自動生成

android_studio

Activity間でのモデルのやりとりや、再生成時の復元処理などで利用するParcelableですが、 describeContents(), writeToParcel(), Parcelable.Creator などを実装する必要があるので、結構面倒くさいですね。

そんなときは、Android Studio PluginのAndroid Parcelable code generatorを使うと、上記の実装部分を自動生成してくれるので非常に便利です

プラグインのインストール

[Android Studio] - [Preference] - [Plugins] - [Browse repositories] でparcelableを検索し、インストールします。

スクリーンショット_2017-01-23_18_02_06

あとは、Android Studioを再起動すればインストール完了です。

プラグインを使う

まずは、モデルクラスを作成します。 とりあえずコンストラクタとgetterメソッドを用意しました。

public class MyParcelable {

    private long id;
    private int count;
    private String name;

    public MyParcelable(long id, int count, String name) {
        this.id = id;
        this.count = count;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public int getCount() {
        return count;
    }

    public String getName() {
        return name;
    }
}

クラス内でGenerateメニューを開くと、Parcelableが追加されているのでクリックします。

スクリーンショット_2017-01-23_18_22_06

対象変数の選択画面が表示されるので、そのまま[OK]ボタンをクリックすると、Parcelableの実装を自動生成してくれます。

スクリーンショット_2017-01-23_18_26_18

public class MyParcelable implements Parcelable {

    private long id;
    private int count;
    private String name;

    public MyParcelable(long id, int count, String name) {
        this.id = id;
        this.count = count;
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public int getCount() {
        return count;
    }

    public String getName() {
        return name;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(this.id);
        dest.writeInt(this.count);
        dest.writeString(this.name);
    }

    protected MyParcelable(Parcel in) {
        this.id = in.readLong();
        this.count = in.readInt();
        this.name = in.readString();
    }

    public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() {
        @Override
        public MyParcelable createFromParcel(Parcel source) {
            return new MyParcelable(source);
        }

        @Override
        public MyParcelable[] newArray(int size) {
            return new MyParcelable[size];
        }
    };
}

おわりに

定形的なコードは、なるべく自動生成できるようになると開発効率が上がるので、こういったプラグインは非常に助かりますね。

参考