どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

Modifierコンポーサブル(Jetpack Compose)を扱う

Parcelableを実装する

ActivityFragmentなどの画面間でデータを渡す際、自前で作成したデータクラスをそのままBundle(Intentの引数など)に乗せることはできないが、 これを可能にするのがParcelableインターフェース。 Serializableと比較して処理速度が非常に高速であるため、Androidアプリ開発ではParcelableの実装が推奨されている。

手動実装(ボイラープレート)

手動実装の場合は以下。 なお、現在 Parcelableを実装する場合はGoogleが提供している機構を使えばこれらが不要になる。(後述)

data class Item(
    var title: String,
    var description: String,
) : Parcelable {
    // 1. Parcelからのコンストラクタ
    constructor(parcel: Parcel) : this(
        parcel.readString()!!,
        parcel.readString()!!
    )

    // 2. データをParcelに書き込む
    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(title)
        parcel.writeString(description)
    }

    // 3. 内容説明用
    override fun describeContents(): Int {
        return 0
    }

    // 4. CREATORの実装
    companion object CREATOR : Parcelable.Creator<Item> {
        override fun createFromParcel(parcel: Parcel): Item {
            return Item(parcel)
        }

        override fun newArray(size: Int): Array<Item?> {
            return arrayOfNulls(size)
        }
    }
}

この実装が終われば、あとはBundle経由でデータの受け渡しが可能になる。

  • データを詰める: bundle.putParcelable("key", item)
  • データを取り出す: val item = bundle.getParcelable("key", Item::class.java)

もっと簡単な方法:@Parcelize アノテーション

現在はGoogleが提供している Kotlin Parcelizeプラグイン を使うのが一般的。

build.gradleにプラグインを追加してアノテーションを付けるだけで、上記のボイラープレートコードがすべて自動生成される。

  1. build.gradleにプラグインを追加
plugins {
    id 'kotlin-parcelize'
}
  1. データクラスにアノテーションを付けるだけ
@Parcelize
data class Item(
    var title: String,
    var description: String,
) : Parcelable

参考

最終更新: 2026.6.11