在Kotlin編寫代碼過程中,需要用到parcelable來進行傳值,按照以前的寫法,進行序列化:
class PayTypeInfo : Parcelable{
var payMethodId: String? = null//支付方式ID
var payMethodName: String? = null//支付方式名稱
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(payMethodId)
dest.writeString(payMethodName)
}
override fun describeContents(): Int {
return 0
}
companion object {
val CREATOR: Parcelable.Creator<PayTypeInfo> = object : Parcelable.Creator<PayTypeInfo> {
override fun createFromParcel(source: Parcel): PayTypeInfo {
val payTypeInfo = PayTypeInfo()
payTypeInfo.payMethodId = source.readString()
payTypeInfo.payMethodName = source.readString()
return payTypeInfo
}
override fun newArray(size: Int): Array<PayTypeInfo> {
return newArray(size)
}
}
}
}
這樣序列化的實體類就寫完了,然后進行傳值
val bundle = Bundle()
val typeList = ArrayList<PayTypeInfo>()
bundle.putParcelableArrayList("payType", typeList)
接受數(shù)據(jù)時:
val bundle = intent.extras
val payTypeList = bundle.getParcelableArrayList<PayTypeInfo>("payType")
運行程序,出現(xiàn)錯誤,錯誤代碼為:BadParcelableException: Parcelable protocol requires a Parcelable.Creator...
經(jīng)過查找資料,找到了解決辦法,只需要在代碼CREATOR前面添加@JvmField即可:
@JvmField val CREATOR: Parcelable.Creator<PayTypeInfo> = object : Parcelable.Creator<PayTypeInfo> {
override fun createFromParcel(source: Parcel): PayTypeInfo {
val payTypeInfo = PayTypeInfo()
payTypeInfo.payMethodId = source.readString()
payTypeInfo.payMethodName = source.readString()
return payTypeInfo
}
override fun newArray(size: Int): Array<PayTypeInfo> {
return newArray(size)
}
}
在運行程序,傳值成功