Android ระบุประเภท: พัสดุ มันถูกใช้เป็นคอนเทนเนอร์เพื่อห่อหุ้มข้อมูลสามารถส่งผ่าน Intent หรือ IPC นอกเหนือจากประเภทพื้นฐานแล้ว เฉพาะคลาสที่ใช้อินเทอร์เฟซ Parcelable เท่านั้นที่สามารถใส่ลงใน Parcel ได้
ประเด็นสำคัญของการใช้งาน Parcelable: จำเป็นต้องดำเนินการสามประการ
1) วิธี writeToParcel เมธอดนี้เขียนข้อมูลของคลาสลงในพัสดุที่จัดเตรียมไว้ภายนอก โดยมีการประกาศดังนี้:
writeToParcel (ปลายทางของพัสดุ, แฟล็ก int) ดู javadoc สำหรับความหมายพารามิเตอร์เฉพาะ
2) อธิบายวิธีการเนื้อหา ฉันไม่เข้าใจว่าการใช้งานคืออะไร อย่างไรก็ตาม คุณสามารถคืนค่า 0 ได้
3) อินเทอร์เฟซ Parcelable แบบคงที่ผู้สร้าง อินเทอร์เฟซนี้มีสองวิธี:
createFromParcel(Parcel in) ใช้ฟังก์ชันการสร้างอินสแตนซ์ของคลาสจากใน
newArray(int size) สร้างอาร์เรย์ประเภท T และขนาดความยาว เพียงประโยคเดียว (ส่งคืน T[size] ใหม่) ก็เพียงพอแล้ว มีการประมาณว่าคลาสภายนอกใช้วิธีนี้เพื่อดีซีเรียลไลซ์อาร์เรย์ของคลาสนี้
กิจกรรมการรับข้อมูลเพื่อการทดสอบ:
นำเข้า android.app.Activity; นำเข้า android.content.Intent; นำเข้า android.os.Bundle; นำเข้า android.os.Parcelable; การทดสอบคลาสสาธารณะขยายกิจกรรม { @Override โมฆะสาธารณะ onCreate (Bundle SavedInstanceState) { super.onCreate (savedInstanceState) ; setContentView(R.layout.main); เจตนา i = getIntent(); i.getParcelableExtra("ใช่"); System.out.println("---->"+p.name); System.out.println("---->"+p.map.size()) ;
กิจกรรมที่ส่ง:
นำเข้า java.util.HashMap; นำเข้า android.app.Activity; นำเข้า android.os.Bundle; คลาสสาธารณะ TestNew ขยายกิจกรรม { @Override โมฆะสาธารณะ onCreate (Bundle SavedInstanceState) { super.onCreate (savedInstanceState) ; setContentView(R.layout.main); เจตนา = เจตนาใหม่ (); บุคคล p = บุคคลใหม่ (); HashMap<String,String>(); p.map.put("yes", "ido"); p.name="ok"; intent.putExtra("yes", p); .class); startActivity (เจตนา);
คลาสการใช้งานแบบพาร์เซลได้:
นำเข้า java.util.HashMap; นำเข้า android.os.Parcel; นำเข้าคลาสสาธารณะ บุคคลใช้ Parcelable { public HashMap<String,String> map = new HashMap<String,String> (); @ แทนที่สาธารณะ int อธิบายเนื้อหา () { กลับ 0; } @ แทนที่สาธารณะ โมฆะ writeToParcel (ปลายทางพัสดุ, ธง int) { dest.writeMap(map); dest.writeString(name); } สาธารณะคงสุดท้าย Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { //Override Creator @Override public Person createFromParcel(Parcel source) { บุคคล p = บุคคลใหม่ (); p.map=source.readHashMap(HashMap.class.getClassLoader()); p.name=source.readString(); return p; } @Override บุคคลสาธารณะ[] newArray(int size) { // TODO วิธีการสร้าง stub return null } }