Ayrıştırılabilir uygulama oluşturma aracı

kotlin-parcelize eklentisi, bir Parcelable uygulama oluşturma aracı sunar.

Parcelable desteğini eklemek için Gradle eklentisini uygulamanızın build.gradle dosyasına ekleyin:

Modern

plugins {
    id 'kotlin-parcelize'
}

Kotlin

plugins {
    id("kotlin-parcelize")
}

Bir sınıfa @Parcelize ile ek açıklama eklediğinizde, aşağıdaki örnekte gösterildiği gibi otomatik olarak bir Parcelable uygulaması oluşturulur:

import kotlinx.parcelize.Parcelize

@Parcelize
class User(val firstName: String, val lastName: String, val age: Int): Parcelable

@Parcelize, tüm serileştirilmiş özelliklerin birincil oluşturucuda bildirilmesini gerektirir. Eklenti, sınıf gövdesinde tanımlanan bir yedekleme alanı içeren her bir özellik için bir uyarı yayınlar. Ayrıca, birincil oluşturucu parametrelerinden bazıları mülk değilse @Parcelize uygulayamazsınız.

Sınıfınız daha gelişmiş bir serileştirme mantığı gerektiriyorsa, bir tamamlayıcı sınıf içine yazın:

@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
        }
    }
}

Desteklenen türler

@Parcelize çok çeşitli türleri destekler:

  • Temel türler (ve kutulu versiyonları)
  • Nesneler ve enum'lar
  • String, CharSequence
  • Exception
  • Size, SizeF, Bundle, IBinder, IInterface, FileDescriptor
  • SparseArray, SparseIntArray, SparseLongArray, SparseBooleanArray
  • Tüm Serializable (Date dahil) ve Parcelable uygulamaları
  • Desteklenen tüm türlerin koleksiyonları: List (ArrayList ile eşlendi), Set (LinkedHashSet ile eşlendi), Map (LinkedHashMap ile eşlendi)
    • Ayrıca bir dizi somut uygulama: ArrayList, LinkedList, SortedSet, NavigableSet, HashSet, LinkedHashSet, TreeSet, SortedMap, NavigableMap, HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap
  • Desteklenen tüm türlerden diziler
  • Desteklenen tüm türlerin null özellikli sürümleri

Özel Parceler

Türünüz doğrudan desteklenmiyorsa bunun için bir Parceler eşleme nesnesi yazabilirsiniz.

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)
    }
}

@TypeParceler veya @WriteWith notlarını kullanarak harici paketleyiciler uygulayabilirsiniz:

// 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

Geri bildirim

kotlin-parcelize Gradle eklentisiyle ilgili herhangi bir sorunla karşılaşırsanız hata bildiriminde bulunabilirsiniz.