在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)
接受数据时:
val bundle = intent.extras
val payTypeList = bundle.getParcelableArrayList<PayTypeInfo>("payType")
运行程序,出现错误,错误代码为:BadParcelableException: Parcelable protocol requires a Parcelable.Creator...
经过查找资料,找到了解决办法,只需要在代码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)
}
}
在运行程序,传值成功
网友评论