ว่าด้วยเรื่อง Custom View Group [Android Design]

เนื่องจากการพัฒนา Android Application นั้นสิ่งที่ Android Developer ไม่ค่อยถนัดกันซักเท่าไหร่ (รวมถึงผู้เขียนด้วย ฮ่าๆ) นั่นคือการ Design ฮ่าๆ บทความนี้ก็เลยอยากจะมาแชร์ประสบการณ์ ที่เขียนแอพ มาซะหน่อย ก็คือการสร้าง Custom View Group นั่นเอง

บางครั้งในแอพเรานั้นอาจมีการใช้ View ซ้ำกันประมาณนี้

activity_main.xml
MainActivity

ง่า!!! โคตรจะเปลือง View เลย

จะดีกว่าไหมถ้าเราทำการแยก View ที่ใช้ซ้ำๆกันมากรุ๊ปรวมเป็น View ใหม่อีกตัวนึงแล้วใช้ View ตัวที่สร้างใหม่แทน

เริ่มเลยดีกว่าเริ่มจากสร้าง View ที่เราจะใช้ซ้ำขึ้นมาชุดนึง แบบนี้

จากนั้นทำการสร้าง class ของ View ใหม่ของเราแล้วทำการ extend FrameLayout

ทำไมต้องใช้ FrameLayout เพราะว่ามันทำไรไม่ได้มากอยู่แล้วเป็น Layout โง่ๆตัวนึงมีหน้าที่เป็นพื้นที่รองรับ View อื่นๆแค่นั้นเอง

เมื่อเรา extend FrameLayout มาแล้วให้จะขึ้นตัวสีแดงๆ ไมต้องตกใจครับ ทำการ กด Alt+Enter เพื่อสร้าง Constructor ของ class เลือกหมดนั่นเลยนะครับ

จากนั้นจะได้ Constructor แบบนี้

จะสังเกตุว่า Constructor ตัวสุดท้ายมันขึ้นสีแดงๆ!!! อ้าววววสึด กุทามรายผิด จากการเอาเมาส์ไปจิ้มถามมันดูมันบอกว่า ไอ้ตัวเนี้ยมีใน Api 21 ขึ้นไปนะ ให้เราใส่ annotation @TargetApi(21) ข้างบนครับ

จากนั้นเรามาทำการ Inflate layout กันเลย โดยสร้าง method initInflate ขึ้นมาครับ แล้วทำการ inflate layout ที่เราสร้างขึ้นมาก่อนหน้านี้เข้าไป

เสร็จแล้วทำการ findViewbyId ให้กับ View แต่ละตัว แล้วให้ Constructor เรียกใช้ method initInflate เป็นอันเสร็จขั้นตอน

ต่อมาเรามาทำในส่วนของ layout กันบ้างโดยให้ทำการเรียก package name ตามด้วยชื่อ class ที่เราทำการ Inflate ไว้

MainActivity

ง่อวววว มาแล้ว 1 ชุด จะเห็นว่า code คลีนขึ้นเยอะเลย ชุดเดียวไม่พอใจลองใส่ไปอีกซัก 2 ชุด แล้วตั้งชื่อ id ให้ custom view แต่ละตัวด้วย

แสดงผลครบทั้ง 3 ชุดแล้วครับ แต่เอ??? แล้วเราจะ set ค่าให้ title กับ data ของแต่ละตัวยังไงกันนะ

ให้กลับมาที่ CustomViewGroupDetail ให้ทำการเพิ่ม คำสั่งสำหรับเรียกใช้งาน

คราวนี้มาดูการเรียกใช้งานบ้างครับให้ประกาศตัวแปล type CustomViewGroupDetail ขึ้นมา 3 ตัวครับ แล้วทำการ findViewById ทั้ง 3 ตัวให้เรียบร้อย จากนั้นลองเรียกคำสั่งที่สร้างไว้

เรียบร้อยครับ เท่านี้เราก็ทำการลดการสร้าง View ที่ซ้ำๆกันลงไปได้เยอะพอสมควรครับ

ขอบคุณที่อ่านจนจบครับผม Blog นี้เป็น Blog แรกที่ผมเขียนขึ้นหากท่านผู้อ่านมีอะไรแนะนำผมให้ไปปรับปรุง แนะนำมาได้เลยครับผม ^^