แอป Android ที่ฉันกำลังพัฒนาอยู่มีกิจกรรมหลักที่เติบโตขึ้นค่อนข้างมาก ส่วนใหญ่เป็นเพราะมีTabWidget
3 แท็บ แต่ละแท็บมีส่วนประกอบค่อนข้างน้อย กิจกรรมต้องควบคุมส่วนประกอบเหล่านั้นทั้งหมดพร้อมกัน ดังนั้นฉันคิดว่าคุณคงนึกออกว่ากิจกรรมนี้มี 20 ช่อง (ช่องสำหรับเกือบทุกองค์ประกอบ) นอกจากนี้ยังมีตรรกะมากมาย (ตัวฟังคลิกตรรกะเพื่อเติมรายการ ฯลฯ )
โดยปกติสิ่งที่ฉันทำในเฟรมเวิร์กที่ใช้ส่วนประกอบคือการแยกทุกอย่างออกเป็นส่วนประกอบที่กำหนดเอง ส่วนประกอบที่กำหนดเองแต่ละส่วนจะมีความรับผิดชอบที่ชัดเจน มันจะมีชุดส่วนประกอบของตัวเองและตรรกะอื่น ๆ ทั้งหมดที่เกี่ยวข้องกับส่วนประกอบนั้น
ฉันพยายามหาวิธีที่จะทำได้และพบบางอย่างในเอกสารของ Android ที่พวกเขาชอบเรียกว่า "Compound Control" (ดูhttp://developer.android.com/guide/topics/ui/custom-components.html#compoundและเลื่อนไปที่ส่วน "Compound Controls") ฉันต้องการสร้างส่วนประกอบดังกล่าวโดยใช้ไฟล์ XML ที่กำหนด ดูโครงสร้าง
ในเอกสารระบุว่า:
โปรดทราบว่าเช่นเดียวกับกิจกรรมคุณสามารถใช้วิธีการประกาศ (ตาม XML) ในการสร้างส่วนประกอบที่มีอยู่หรือคุณสามารถซ้อนกันโดยทางโปรแกรมจากโค้ดของคุณ
นั่นเป็นข่าวดี! วิธีการที่ใช้ XML เป็นสิ่งที่ฉันต้องการ! แต่มันไม่ได้บอกว่าต้องทำอย่างไรยกเว้นว่า "ชอบด้วยกิจกรรม" ... แต่สิ่งที่ฉันทำในกิจกรรมคือการเรียกร้องsetContentView(...)
ให้ขยายมุมมองจาก XML LinearLayout
วิธีการที่ไม่สามารถใช้ได้ถ้าคุณตัวอย่างเช่นประเภทรอง
ดังนั้นฉันจึงพยายามขยาย XML ด้วยตนเองดังนี้:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
สิ่งนี้ใช้งานได้ยกเว้นข้อเท็จจริงที่ว่า XML ที่ฉันกำลังโหลดได้LinearLayout
ประกาศเป็นองค์ประกอบราก ส่งผลให้พองLinearLayout
เป็นเด็กMyCompoundComponent
ซึ่งตัวเองอยู่แล้วLinearLayout
!! ตอนนี้เรามี LinearLayout ที่ซ้ำซ้อนอยู่ระหว่างMyCompoundComponent
และมุมมองที่ต้องการจริงๆ
ใครช่วยบอกวิธีที่ดีกว่านี้ให้ฉันได้โดยไม่ต้องมีการLinearLayout
สร้างอินสแตนซ์ซ้ำซ้อน