Önceki yazılarımda Androidde Parcelable implementasyonundan bahsetmiştim. Parcelable
ile ilgili detaylı bilgiye oradan ulaşabilirsiniz.
Kısa olarak özetlemek gerekirse, Androidde verileri bir yerden bir yere paslıyorsak ve o veriyi nesne olarak göndereceksek o verinin Parcelable ya da Serializable interfacelerinden birini implement etmesi gerekiyordu. Primitive tipler için bu implementasyonlar gerek yoktu.
Alttaki gibi Kotlinde yazılan bir model classı olduğunu düşünün.
1 |
data class Person(val name: String, val age: Int, val email: String, val phone: Long) |
ve bu classı Parcelable interface inden implement edelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
data class Person(val name: String, val age: Int, val email: String, val phone: Long) : Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readInt(), parcel.readString(), parcel.readLong()) override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(name) parcel.writeInt(age) parcel.writeString(email) parcel.writeLong(phone) } override fun describeContents(): Int { return 0 } companion object CREATOR : Parcelable.Creator<Person> { override fun createFromParcel(parcel: Parcel): Person { return Person(parcel) } override fun newArray(size: Int): Array<Person?> { return arrayOfNulls(size) } } } |
Gördüğünüz gibi tek satırlık bir model classı onlarca gereksiz satırla doldu taştı. Bunu şimdiye kadar hep göz ardı ettik. Ben bazı projelerimde bunun önüne geçebilmek için bazı extension functionlar yazdım ama hala bir kod kalabalığı vardı. Ta ki Kotlin 1.1.4 sürümüyle beraber @Parcelize
annotation gelene kadar.
Bu annotation sayesinde boilerplate koddan kurtulabiliriz. Şimdi nasıl kullanabiliriz buna bakalım.
Öncelikle projenizin build.gradle
dosyasına alttaki satıları ekliyoruz.
1 2 3 |
androidExtensions { experimental = true } |
Bir de dipnot olarak belirteyim yine aynı dosyada üst kısımda
1 |
apply plugin: 'kotlin-android-extensions' |
yazdığından emin olun.
Bunları yazdıktan sonra projeyi build ediyoruz. Ardından yazdığımız model classına sadece @Parcelize
annotation eklememiz yeterli oluyor.
1 2 3 4 5 |
@Parcelize data class PersonParcelize(val name: String, val age: Int, val email: String, val phone: Long) : Parcelable |
Yine kotlin sayesinde satırlarca kodu birkaç satıra indirmiş olduk. İşte @Parcelable
kullanımı bu kadar basit
NOT: @Parcelable
kullandılğında Lint Error alıyorsanız bunu görmezden gelin, bu Android Studio için bir issue ve çözüm aşamasında ileride bunu geliştirme ekibi çözüme ulaştıracaktır.
Kaynaklar:
https://proandroiddev.com/parcelable-in-kotlin-here-comes-parcelize-b998d5a5fcac
https://android.jlelse.eu/yet-another-awesome-kotlin-feature-parcelize-5439718ba220