เครื่องมือสร้างการใช้งานแบบพาร์เซล

ปลั๊กอิน kotlin-parcelize ให้ เครื่องมือสร้างการติดตั้งใช้งาน Parcelable

หากต้องการให้รองรับ Parcelable ให้เพิ่มปลั๊กอิน Gradle ลงใน ไฟล์ build.gradle ของแอป:

ดึงดูด

plugins {
    id 'kotlin-parcelize'
}

Kotlin

plugins {
    id("kotlin-parcelize")
}

เมื่อคุณใส่คำอธิบายประกอบของชั้นเรียนด้วย @Parcelize การใช้งาน Parcelable จะสร้างขึ้นโดยอัตโนมัติ ดังที่แสดงในตัวอย่างต่อไปนี้

import kotlinx.parcelize.Parcelize

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

@Parcelize กำหนดให้ต้องประกาศพร็อพเพอร์ตี้แบบอนุกรมทั้งหมดใน ตัวสร้างหลัก ปลั๊กอินออกคำเตือนในแต่ละพร็อพเพอร์ตี้ โดยมีช่องสนับสนุนที่ประกาศไว้ในเนื้อหาของชั้นเรียน นอกจากนี้ คุณไม่สามารถ ใช้ @Parcelize หากพารามิเตอร์ตัวสร้างหลักบางรายการคือ ไม่ใช่พร็อพเพอร์ตี้

หากชั้นเรียนต้องใช้ตรรกะการเรียงอันดับขั้นสูงยิ่งขึ้น ให้เขียนในชั้นเรียนร่วมด้วย ดังนี้

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

ประเภทที่รองรับ

@Parcelize รองรับหลายประเภท ได้แก่

  • ประเภทพื้นฐาน (และเวอร์ชันรวมกล่อง)
  • ออบเจ็กต์และ Enum
  • String, CharSequence
  • Exception
  • Size, SizeF, Bundle, IBinder, IInterface, FileDescriptor
  • SparseArray, SparseIntArray, SparseLongArray, SparseBooleanArray
  • การติดตั้งใช้งาน Serializable (รวมถึง Date) และ Parcelable ทั้งหมด
  • คอลเล็กชันของประเภทที่รองรับทั้งหมด: List (แมปกับ ArrayList), Set (แมปกับ LinkedHashSet), Map (แมปกับ LinkedHashMap)
    • ยังมีการติดตั้งใช้งานที่เป็นรูปธรรมอีกมากมาย: ArrayList, LinkedList SortedSet, NavigableSet, HashSet, LinkedHashSet, TreeSet SortedMap, NavigableMap, HashMap, LinkedHashMap, TreeMap ConcurrentHashMap
  • อาร์เรย์ของประเภทที่รองรับทั้งหมด
  • เวอร์ชันที่เป็น Null ของประเภทที่รองรับทั้งหมด

Parceler ที่กำหนดเอง

หากระบบไม่รองรับประเภทของคุณโดยตรง คุณสามารถเขียน Parceler ออบเจ็กต์การแมปข้อมูล

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 หรือ @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

ความคิดเห็น

หากพบปัญหาเกี่ยวกับปลั๊กอิน Gradle ของ kotlin-parcelize โปรดทำดังนี้ รายงานข้อบกพร่อง