Plugin kotlin-parcelize
menyediakan
generator implementasi Parcelable
.
Guna menyertakan dukungan untuk Parcelable
, tambahkan plugin Gradle ke
file build.gradle
aplikasi Anda:
Groovy
plugins { id 'kotlin-parcelize' }
Kotlin
plugins { id("kotlin-parcelize") }
Saat Anda menganotasi class dengan @Parcelize
, implementasi Parcelable
otomatis dibuat, seperti yang ditunjukkan dalam contoh berikut:
import kotlinx.parcelize.Parcelize
@Parcelize
class User(val firstName: String, val lastName: String, val age: Int): Parcelable
@Parcelize
mengharuskan agar semua properti yang diserialisasi dideklarasikan dalam konstruktor utama. Plugin mengeluarkan peringatan di setiap properti dengan kolom pendukung yang dideklarasikan dalam isi class. Selain itu, Anda tidak dapat menerapkan @Parcelize
jika beberapa parameter konstruktor utama bukan merupakan properti.
Jika class Anda memerlukan logika serialisasi lanjutan lainnya, tuliskan di dalam class pendamping:
@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
private companion object : Parceler<User> {
override fun User.write(parcel: Parcel, flags: Int) {
// Custom write implementation
}
override fun create(parcel: Parcel): User {
// Custom read implementation
}
}
}
Jenis yang didukung
@Parcelize
mendukung beragam jenis:
- Jenis primitif (dan versi box-nya)
- Objek dan enum
String
,CharSequence
Exception
Size
,SizeF
,Bundle
,IBinder
,IInterface
,FileDescriptor
SparseArray
,SparseIntArray
,SparseLongArray
,SparseBooleanArray
- Semua implementasi
Serializable
(termasukDate
) danParcelable
- Koleksi semua jenis yang didukung:
List
(dipetakan keArrayList
),Set
(dipetakan keLinkedHashSet
),Map
(dipetakan keLinkedHashMap
)- Juga sejumlah implementasi konkret:
ArrayList
,LinkedList
,SortedSet
,NavigableSet
,HashSet
,LinkedHashSet
,TreeSet
,SortedMap
,NavigableMap
,HashMap
,LinkedHashMap
,TreeMap
,ConcurrentHashMap
- Juga sejumlah implementasi konkret:
- Array semua jenis yang didukung
- Versi nullable semua jenis yang didukung
Parceler
kustom
Jika jenis tidak didukung secara langsung, Anda dapat menulis objek pemetaan Parceler
untuknya.
class ExternalClass(val value: Int)
object ExternalClassParceler : Parceler<ExternalClass> {
override fun create(parcel: Parcel) = ExternalClass(parcel.readInt())
override fun ExternalClass.write(parcel: Parcel, flags: Int) {
parcel.writeInt(value)
}
}
Anda dapat menerapkan parceler eksternal menggunakan anotasi @TypeParceler
atau @WriteWith
:
// Class-local parceler
@Parcelize
@TypeParceler<ExternalClass, ExternalClassParceler>()
class MyClass(val external: ExternalClass) : Parcelable
// Property-local parceler
@Parcelize
class MyClass(@TypeParceler<ExternalClass, ExternalClassParceler>() val external: ExternalClass) : Parcelable
// Type-local parceler
@Parcelize
class MyClass(val external: @WriteWith<ExternalClassParceler>() ExternalClass) : Parcelable
Masukan
Jika mengalami masalah dengan plugin Gradle kotlin-parcelize
, Anda dapat
melaporkan bug.