ปลั๊กอิน 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
โปรดทำดังนี้
รายงานข้อบกพร่อง