[{"data":1,"prerenderedAt":601},["ShallowReactive",2],{"\u002Fandroid\u002Fandroid_sdk\u002Fpercelable":3},{"id":4,"title":5,"body":6,"date":592,"description":593,"draft":594,"extension":595,"meta":596,"navigation":185,"path":597,"seo":598,"stem":599,"__hash__":600},"blog\u002F01.android\u002F03.android_SDK\u002F05.percelable.md","Modifierコンポーサブル（Jetpack Compose）を扱う",{"type":7,"value":8,"toc":586},"minimark",[9,14,41,46,52,429,435,457,460,468,475,485,493,514,521,568,571,582],[10,11,13],"h1",{"id":12},"parcelableを実装する","Parcelableを実装する",[15,16,17,21,22,25,26,29,30,33,34,37,38,40],"p",{},[18,19,20],"code",{},"Activity","や",[18,23,24],{},"Fragment","などの画面間でデータを渡す際、自前で作成したデータクラスをそのまま",[18,27,28],{},"Bundle","（Intentの引数など）に乗せることはできないが、\nこれを可能にするのが",[18,31,32],{},"Parcelable","インターフェース。\n",[18,35,36],{},"Serializable","と比較して処理速度が非常に高速であるため、Androidアプリ開発では",[18,39,32],{},"の実装が推奨されている。",[42,43,45],"h2",{"id":44},"手動実装ボイラープレート","手動実装（ボイラープレート）",[15,47,48,49,51],{},"手動実装の場合は以下。\nなお、現在 ",[18,50,32],{},"を実装する場合はGoogleが提供している機構を使えばこれらが不要になる。（後述）",[53,54,59],"pre",{"className":55,"code":56,"language":57,"meta":58,"style":58},"language-kotlin shiki shiki-themes github-light","data class Item(\n    var title: String,\n    var description: String,\n) : Parcelable {\n    \u002F\u002F 1. Parcelからのコンストラクタ\n    constructor(parcel: Parcel) : this(\n        parcel.readString()!!,\n        parcel.readString()!!\n    )\n\n    \u002F\u002F 2. データをParcelに書き込む\n    override fun writeToParcel(parcel: Parcel, flags: Int) {\n        parcel.writeString(title)\n        parcel.writeString(description)\n    }\n\n    \u002F\u002F 3. 内容説明用\n    override fun describeContents(): Int {\n        return 0\n    }\n\n    \u002F\u002F 4. CREATORの実装\n    companion object CREATOR : Parcelable.Creator\u003CItem> {\n        override fun createFromParcel(parcel: Parcel): Item {\n            return Item(parcel)\n        }\n\n        override fun newArray(size: Int): Array\u003CItem?> {\n            return arrayOfNulls(size)\n        }\n    }\n}\n\n","kotlin","",[18,60,61,81,96,108,119,126,145,162,174,180,187,193,218,229,239,245,250,256,273,283,288,293,299,331,353,364,370,375,402,413,418,423],{"__ignoreMap":58},[62,63,66,70,73,77],"span",{"class":64,"line":65},"line",1,[62,67,69],{"class":68},"sD7c4","data",[62,71,72],{"class":68}," class",[62,74,76],{"class":75},"s7eDp"," Item",[62,78,80],{"class":79},"sgsFI","(\n",[62,82,84,87,90,93],{"class":64,"line":83},2,[62,85,86],{"class":68},"    var",[62,88,89],{"class":79}," title: ",[62,91,92],{"class":75},"String",[62,94,95],{"class":79},",\n",[62,97,99,101,104,106],{"class":64,"line":98},3,[62,100,86],{"class":68},[62,102,103],{"class":79}," description: ",[62,105,92],{"class":75},[62,107,95],{"class":79},[62,109,111,114,116],{"class":64,"line":110},4,[62,112,113],{"class":79},") : ",[62,115,32],{"class":75},[62,117,118],{"class":79}," {\n",[62,120,122],{"class":64,"line":121},5,[62,123,125],{"class":124},"sAwPA","    \u002F\u002F 1. Parcelからのコンストラクタ\n",[62,127,129,132,135,138,140,143],{"class":64,"line":128},6,[62,130,131],{"class":75},"    constructor",[62,133,134],{"class":79},"(parcel: ",[62,136,137],{"class":75},"Parcel",[62,139,113],{"class":79},[62,141,142],{"class":75},"this",[62,144,80],{"class":79},[62,146,148,151,154,157,160],{"class":64,"line":147},7,[62,149,150],{"class":79},"        parcel.",[62,152,153],{"class":75},"readString",[62,155,156],{"class":79},"()",[62,158,159],{"class":68},"!!",[62,161,95],{"class":79},[62,163,165,167,169,171],{"class":64,"line":164},8,[62,166,150],{"class":79},[62,168,153],{"class":75},[62,170,156],{"class":79},[62,172,173],{"class":68},"!!\n",[62,175,177],{"class":64,"line":176},9,[62,178,179],{"class":79},"    )\n",[62,181,183],{"class":64,"line":182},10,[62,184,186],{"emptyLinePlaceholder":185},true,"\n",[62,188,190],{"class":64,"line":189},11,[62,191,192],{"class":124},"    \u002F\u002F 2. データをParcelに書き込む\n",[62,194,196,199,202,205,207,209,212,215],{"class":64,"line":195},12,[62,197,198],{"class":68},"    override",[62,200,201],{"class":68}," fun",[62,203,204],{"class":75}," writeToParcel",[62,206,134],{"class":79},[62,208,137],{"class":75},[62,210,211],{"class":79},", flags: ",[62,213,214],{"class":75},"Int",[62,216,217],{"class":79},") {\n",[62,219,221,223,226],{"class":64,"line":220},13,[62,222,150],{"class":79},[62,224,225],{"class":75},"writeString",[62,227,228],{"class":79},"(title)\n",[62,230,232,234,236],{"class":64,"line":231},14,[62,233,150],{"class":79},[62,235,225],{"class":75},[62,237,238],{"class":79},"(description)\n",[62,240,242],{"class":64,"line":241},15,[62,243,244],{"class":79},"    }\n",[62,246,248],{"class":64,"line":247},16,[62,249,186],{"emptyLinePlaceholder":185},[62,251,253],{"class":64,"line":252},17,[62,254,255],{"class":124},"    \u002F\u002F 3. 内容説明用\n",[62,257,259,261,263,266,269,271],{"class":64,"line":258},18,[62,260,198],{"class":68},[62,262,201],{"class":68},[62,264,265],{"class":75}," describeContents",[62,267,268],{"class":79},"(): ",[62,270,214],{"class":75},[62,272,118],{"class":79},[62,274,276,279],{"class":64,"line":275},19,[62,277,278],{"class":68},"        return",[62,280,282],{"class":281},"sYu0t"," 0\n",[62,284,286],{"class":64,"line":285},20,[62,287,244],{"class":79},[62,289,291],{"class":64,"line":290},21,[62,292,186],{"emptyLinePlaceholder":185},[62,294,296],{"class":64,"line":295},22,[62,297,298],{"class":124},"    \u002F\u002F 4. CREATORの実装\n",[62,300,302,305,308,311,314,316,319,322,325,328],{"class":64,"line":301},23,[62,303,304],{"class":68},"    companion",[62,306,307],{"class":68}," object",[62,309,310],{"class":75}," CREATOR",[62,312,313],{"class":79}," : ",[62,315,32],{"class":75},[62,317,318],{"class":79},".",[62,320,321],{"class":75},"Creator",[62,323,324],{"class":79},"\u003C",[62,326,327],{"class":75},"Item",[62,329,330],{"class":79},"> {\n",[62,332,334,337,339,342,344,346,349,351],{"class":64,"line":333},24,[62,335,336],{"class":68},"        override",[62,338,201],{"class":68},[62,340,341],{"class":75}," createFromParcel",[62,343,134],{"class":79},[62,345,137],{"class":75},[62,347,348],{"class":79},"): ",[62,350,327],{"class":75},[62,352,118],{"class":79},[62,354,356,359,361],{"class":64,"line":355},25,[62,357,358],{"class":68},"            return",[62,360,76],{"class":75},[62,362,363],{"class":79},"(parcel)\n",[62,365,367],{"class":64,"line":366},26,[62,368,369],{"class":79},"        }\n",[62,371,373],{"class":64,"line":372},27,[62,374,186],{"emptyLinePlaceholder":185},[62,376,378,380,382,385,388,390,392,395,397,399],{"class":64,"line":377},28,[62,379,336],{"class":68},[62,381,201],{"class":68},[62,383,384],{"class":75}," newArray",[62,386,387],{"class":79},"(size: ",[62,389,214],{"class":75},[62,391,348],{"class":79},[62,393,394],{"class":75},"Array",[62,396,324],{"class":79},[62,398,327],{"class":75},[62,400,401],{"class":79},"?> {\n",[62,403,405,407,410],{"class":64,"line":404},29,[62,406,358],{"class":68},[62,408,409],{"class":75}," arrayOfNulls",[62,411,412],{"class":79},"(size)\n",[62,414,416],{"class":64,"line":415},30,[62,417,369],{"class":79},[62,419,421],{"class":64,"line":420},31,[62,422,244],{"class":79},[62,424,426],{"class":64,"line":425},32,[62,427,428],{"class":79},"}\n",[15,430,431,432,434],{},"この実装が終われば、あとは",[18,433,28],{},"経由でデータの受け渡しが可能になる。",[436,437,438,449],"ul",{},[439,440,441,445,446],"li",{},[442,443,444],"strong",{},"データを詰める",": ",[18,447,448],{},"bundle.putParcelable(\"key\", item)",[439,450,451,445,454],{},[442,452,453],{},"データを取り出す",[18,455,456],{},"val item = bundle.getParcelable(\"key\", Item::class.java)",[458,459],"hr",{},[42,461,463,464,467],{"id":462},"もっと簡単な方法parcelize-アノテーション","もっと簡単な方法：",[18,465,466],{},"@Parcelize"," アノテーション",[15,469,470,471,474],{},"現在はGoogleが提供している ",[442,472,473],{},"Kotlin Parcelizeプラグイン"," を使うのが一般的。",[15,476,477,480,481,484],{},[18,478,479],{},"build.gradle","にプラグインを追加してアノテーションを付けるだけで、上記のボイラープレートコードが",[442,482,483],{},"すべて自動生成","される。",[486,487,488],"ol",{},[439,489,490,492],{},[442,491,479],{},"にプラグインを追加",[53,494,498],{"className":495,"code":496,"language":497,"meta":58,"style":58},"language-gradle shiki shiki-themes github-light","plugins {\n    id 'kotlin-parcelize'\n}\n\n","gradle",[18,499,500,505,510],{"__ignoreMap":58},[62,501,502],{"class":64,"line":65},[62,503,504],{},"plugins {\n",[62,506,507],{"class":64,"line":83},[62,508,509],{},"    id 'kotlin-parcelize'\n",[62,511,512],{"class":64,"line":98},[62,513,428],{},[486,515,516],{"start":83},[439,517,518],{},[442,519,520],{},"データクラスにアノテーションを付けるだけ",[53,522,524],{"className":55,"code":523,"language":57,"meta":58,"style":58},"@Parcelize\ndata class Item(\n    var title: String,\n    var description: String,\n) : Parcelable\n\n",[18,525,526,531,541,551,561],{"__ignoreMap":58},[62,527,528],{"class":64,"line":65},[62,529,530],{"class":75},"@Parcelize\n",[62,532,533,535,537,539],{"class":64,"line":83},[62,534,69],{"class":68},[62,536,72],{"class":68},[62,538,76],{"class":75},[62,540,80],{"class":79},[62,542,543,545,547,549],{"class":64,"line":98},[62,544,86],{"class":68},[62,546,89],{"class":79},[62,548,92],{"class":75},[62,550,95],{"class":79},[62,552,553,555,557,559],{"class":64,"line":110},[62,554,86],{"class":68},[62,556,103],{"class":79},[62,558,92],{"class":75},[62,560,95],{"class":79},[62,562,563,565],{"class":64,"line":121},[62,564,113],{"class":79},[62,566,567],{"class":75},"Parcelable\n",[42,569,570],{"id":570},"参考",[436,572,573],{},[439,574,575],{},[576,577,581],"a",{"href":578,"rel":579},"https:\u002F\u002Fdeveloper.android.com\u002Fkotlin\u002Fparcelize",[580],"nofollow","公式ドキュメント（Parcelable 実装生成ツール）",[583,584,585],"style",{},"html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":58,"searchDepth":83,"depth":83,"links":587},[588,589,591],{"id":44,"depth":83,"text":45},{"id":462,"depth":83,"text":590},"もっと簡単な方法：@Parcelize アノテーション",{"id":570,"depth":83,"text":570},"2026-06-12T07:00:00+09:00","Modifierコンポーサブルの実装について紹介・解説します。",false,"md",{},"\u002Fandroid\u002Fandroid_sdk\u002Fpercelable",{"title":5,"description":593},"01.android\u002F03.android_SDK\u002F05.percelable","j4D0LEvQRhTUF9p09SlaGSwtWI0MuIWm5rWnGn91U4I",1781530001205]