diadia

興味があることをやってみる。自分のメモを残しておきます。

Activityにデータを渡す

参考資料

Android Kotlin: Use Parcelable to pass object to another activity

Android — Parcelable en Kotlin

実装方法

単純にbundle.putPrcelable()メソッドを使って受け渡したいオブジェクトをBundleオブジェクトに格納することができない。 その前にparacelableインターフェースを使う必要があるようだ。実装は以下の通り。

実装概要

  1. Palacelableを実装したデータクラスを作成する。 このデータクラスにはwriteToParcelとdescribeContentsをオーバーライドしたものを準備する必要がある。

  2. そしてインテントに送りたいデータオブジェクトを作成しインテントに格納する。

  3. 画面遷移した先でデータオブジェクトを取得する。

受け渡し用のデータクラスの作成

import android.os.Parcel
import android.os.Parcelable

data class AccountsList(val accounts: Array<Account!> ) : Parcelable {

  //writeToParcelをオーバーライド
  override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeParcelable(accounts, flags)        
  }

  //describeContentsをオーバーライド
  override fun describeContents(): Int = 0



  companion object {
    val CREATOR: Parcelable.Creator<AccountsList> = object : Parcelable.Creator<AccountsList>{
    override fun newArray(size: Int): Array<AccountsList?> = arrayOfNulls<AccountsList>(size)
    override fun createFromParcel(source: Parcel): AccountsList = AccountsList(source)
        }
    }

    constructor(source: Parcel):this(
            source.readParcelable(AccountsList::class.java.classLoader)
    )

}

データの受け渡しと引き出し

val intent = Intent(this.activity, NewActivityName::class.java)
val bundle = Bundle()
//Activityに渡したいデータインスタンスを生成
val parcel = ParcelObjectName(titleValue,descriptionValue)


bundle.putParcelable("key", parcel)
intent.putExtra("Bundle", bundle)
startActivity(intent)



val bundle = intent.getBundleExtra("Bundle")
val object = bundle.getParcelable<ParcelObjectName>("key")