一、正常使用:
data class User(
val name: String?,
val sex: String?,
val age: Int
): Parcelable {
constructor(parcel: Parcel) : this(
parcel.readString(),
parcel.readString(),
parcel.readInt()
) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(name)
parcel.writeString(sex)
parcel.writeInt(age)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<User> {
override fun createFromParcel(parcel: Parcel): User {
return User(parcel)
}
override fun newArray(size: Int): Array<User?> {
return arrayOfNulls(size)
}
}
}
正常使用就是重写Parcelable的几个方法。
二、使用注解:
@Parcelize
data class User(
val name: String?,
val sex: String?,
val age: Int
): Parcelable
完事!
需要注意的点就是要使用 @Parcelize 需要再app下面的build.gradle下面添加上:
android {
...
androidExtensions {
experimental = true
}
}
如果遇到报如下No signature of method…的错误:
那是因为没有添加 kotlin-android-extensions 依赖,也是在app下面的build.gradle下:
添加上再重新编译即可!
更新:
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
// id 'kotlin-android-extensions'
id 'kotlin-parcelize' //后续升级Kotlin插件版本,需要更换成这种引入方式, kotlin-android-extensions已废弃
}