Parcelize - Hỗ trợ tuyệt vời cho Parcelable
Parcelize được kotlin thêm vào từ version 1.1.4 Theo nguyên văn của Kotlint thì Android Extensions plugin now includes an automatic Parcelable implementation generator. Declare the serialized properties in a primary constructor and add a @Parcelize annotation, and writeToParcel()/createFromParc ...
Parcelize được kotlin thêm vào từ version 1.1.4 Theo nguyên văn của Kotlint thì
Android Extensions plugin now includes an automatic Parcelable implementation generator. Declare the serialized properties in a primary constructor and add a @Parcelize annotation, and writeToParcel()/createFromParcel() methods will be created automatically.
Hiểu theo nôm na là chỉ cần bạn thêm annotation Parcelize vào đầu class model thì nó sẽ tự generator các phương thức của Parcelable, làm class của chúng ta nhìn gọn rất nhiều.
Trong grandle của app chúng ta thêm vào như dưới : apply plugin: ‘kotlin-android-extensions’ và
androidExtensions { experimental = true }
Đây là code khi không sử dụng Parcelize
data class Device(@SerializedName("device_id") val deviceId: String, @SerializedName("label") val label: String?, @SerializedName("home_electronic_id") val homeElectronicId: Int = NaN, @SerializedName("type") var type: String? = null) : Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readString(), parcel.readInt(), parcel.readString()) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(deviceId) parcel.writeString(label) parcel.writeInt(homeElectronicId) parcel.writeString(type) } override fun describeContents(): Int = 0 companion object CREATOR : Parcelable.Creator<Device> { override fun createFromParcel(parcel: Parcel): Device { return Device(parcel) } override fun newArray(size: Int): Array<Device?> { return arrayOfNulls(size) } } }
Chắc ai cũng từng dùng Parcelable thì sẽ nhìn cái này cũng quen rồi, nếu class có nhiều biến hơn thì nó sẽ genrerate dài hơn rất nhiều @@ Còn đây là khi chúng ta sử dụng Parcelize
@Parcelize data class Device(@SerializedName("device_id") val deviceId: String, @SerializedName("label") val label: String?, @SerializedName("home_electronic_id") val homeElectronicId: Int = NaN, @SerializedName("type") var type: String? = null) : Parcelable {
Nhìn gọn và hơn rất nhiều phải không nào.
Cảm ơn các bạn đã đọc bài viết của mình