Android 如何藉由Intent傳遞ArrayList?

Kotlin語法不熟悉可以參考

程式語言 -> Kotlin

Intent基本切換,不代資料

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
finish()//關掉當前頁面

傳遞ArrayList前的準備

需要使用Parcelize,ext.kotlin_version = “1.1.4″以上皆已支援

建議還是使用新的版本,畢竟Kotlin現在都已經到1.5.21版本了

如果還是喜歡懷舊,"1.1.4″以前的版本,參考下方


class User(var name: String?, var info: String?): Parcelable {
    constructor(parcel: Parcel): this(
        parcel.readString()
        ,parcel.readString())
    override fun describeContents(): Int {
        return 0
    }
    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest?.writeString(name)
        dest?.writeString(info)
    }
    companion object CREATOR: Parcelable.Creator {
        override fun createFromParcel(source: Parcel): User {
            return User(source)
        }
        override fun newArray(size: Int): Array {
            return arrayOfNulls(size)
        }
    }
}

“1.1.4″以後的版本,參考下方

@Parcelize
class User(var name: String?, var info: String?): Parcelable {

}

Intent切換,並傳遞ArrayList

//MainActivity
//按下Button切換至SecondActivity
//並傳遞ArrayList
button.setOnClickListener {
    val appleUser = User("Apple", "A1")
    val javaUser = User("Java", "B1")
    val kotlinUser = User("Kotlin", "C1")
    val intent = Intent(
        this,
        SecondActivity::class.java
    )
    intent.putExtra(
        "user",
        arrayListOf(
            appleUser,
            javaUser,
            kotlinUser
        )
    )
    startActivity(intent)
    finish()
}
//SecondActivity的onCreate的地方
//將ParcelableArrayList的資料讀出來
val user = intent
    .getParcelableArrayListExtra("user")
user?.run {
    indices.forEach {
        println("name ${user[it].name}  " +
                "info ${user[it].info}"
        )
    }
}

訂閱Codeilin的旅程,若有最新消息會通知。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

透過 WordPress.com 建置的網站.

向上 ↑

%d 位部落客按了讚: