{พื้้นฐาน} Fragment ตอนที่ 2 ความสามารถที่แท้จริง

มาต่อกันเลยเนอะ กับบทความนี้ ซึ่งตอนที่แล้วเจ้าของบทความได้กล่าวถึง Fragment ในเรื่องของการใช้งาน การสร้าง Fragment การนำมาใช้งานร่วมกับ Activity รวมถึงการ findViewById ภายใน Fragment กันไปคร่าวๆแล้ว ทีนี้ในบทความนี้เจ้าของบทความจะพามาดูความสามารถของ Fragment อีกแบบกันนะ ใครยังไม่ได้อ่านตอนที่ 1 สามารถย้อนไปอ่านได้จากลิ้งข้างล่างนะ

เริ่มกันเลย !!!! จากการที่เรารู้จัก Fragment ไปแล้ว คร่าวๆครั้งก่อน วันนี้เราจะมารู้จักกับความสามารถกัน อ้าวแล้วมันมีความสามารถอย่างอื่นซ่อนอยู่หรอ (ถูกต้องแล้วครับ) ซึ่ง ความสามารถนั้นก็เป็นข้อสำคัญที่ Dev ส่วนใหญ่ควรใช้ Fragment ในการทำงานแทนการเขียน Code บน Activity อันนี้ข้อสำคัญเลย โดยที่ Fragment จะมีความสามารถแบบนี้ (สามารถใช้ได้กับ การเรียก Fragment โดยใช้ Java เท่านั้นนะ)

  1. เพิ่ม (add) — เป็นการเพิ่ม Fragment ไปเรื่อยๆ ตามชื่อเลย มีการเพิ่มซ่อนกันไปเรื่อยๆ
  2. แปะทับ (replace) — เป็นการแปะทับของเก่า ซึ่งจะทำให้ Fragment มีจำนวนเพียงอันเดียว (วิธีนี้นิยมกันอย่างมาก)
  3. ลบทิ้ง (remove) — นอกจากแปะทับแล้วยังสามารถ ลบทิ้งได้ด้วย
  4. เก็บสถานะไว้ (backstack) — เป็นการเก็บ Fragment ที่ต้องการจะใช้เอาไว้ เพื่อเรียกขึ้นมาในภายหลัง

เดี๋ยวเราจะมาค่อยๆอธิบายทีละอันกัน เพราะเดี๋ยวงงกันไปใหญ่ ความสามารถทุกอย่างมีข้อดี และข้อเสียเฉพาะตัวของมัน เพราะฉะนั้นควรเลือกใช้ให้ตรงตามวัตถุประสงค์การใช้งานนะจ๊ะ

  1. Add การเพิ่ม Fragment การเพิ่ม Fragment เราสามารถเพิ่มได้โดยคำสั่งนี้

ง่ายๆเลย เห็นไหม เราจะใช้ Fragment Transaction ที่เราสร้างขึ้นมา ทำการ add ลงไป โดยที่ การ add จะต้องระบุ พื้นที่ ที่จะเพิ่ม Fragment ลงไปด้วย แล้วก็ตามด้วย ชื่อ Fragment นั้นๆ ในที่นี้จะเป็น fragmentLoginActivity ซึ่งจริงๆแล้วก็คือชื่อตัวแปรที่เอาไว้อ้างอิงกับ Object นั้นๆ

2. Replace การแปะทับ การแปะทับเป็นวิธีที่ Dev ส่วนใหญ่นิยมมาก เพราะอะไรเดี๋ยวรู้ มาดูกันก่อนว่าจะใช้คำสั่ง Replace กันยังไงเนอะ

สำหรับคำสั่ง Replace ง่ายๆเลย แค่เปลี่ยนจาก add เป็น Replace แค่นั้นเองก็สามารถใช้ได้และ

3. การ Remove Fragment เป็นการลบ Fragment ออกนั้นเองเพราอะไร เดี๋ยวอธิบายอีกเช่นกัน มาดูการใช้งานของมันตามเดิมนะ

ก็เปลี่ยนจาก Replace หรือ Add เป็น remove แค่นั้นเลย ก็สามารถลบ Fragment ออกไปได้แล้ว

4. backstack อย่างที่เจ้าของบทความบอกไปมันสามารถเก็บ Fragment ไว้เรียกได้ ซึ่งเราจะเรียกกันว่า backstack โดยที่คำสั่งเราจะใช้แบบนี้

อิอิ แอบเปลี่ยนแนวโค๊ดนิดหน่อยให้ งงกันเล่นๆ เพื่อบทความข้างหน้าจะอธิบายได้ง่ายขึ้น แต่ยังไงก็ขอให้ผู้ที่เข้ามาอ่าน Focus ไว้ที่คำสั่ง addToBackStack เท่านั้นก่อนนะ อย่าไปมองถึงการเรียกเดี๋ยวงง ให้รู้แค่ว่า คำสั่งเรียกหลังจากคำสั่งไหนแค่นั้นพอ

เอาล่ะ แล้วหลังจากที่เราอธิบายกันเสร็จแล้วถึงการใช้งานคำสั่ง ทั้ง 4 ข้อ ทีนี้ก็จะมีคำถามว่า Add , Replace , remove , addToBackStack ต่างกันยังไง โดยที่เจ้าของบทความขอ นำเสนอภาพให้เข้าใจกัน เพียงภาพเดี๋ยวมองแล้ว จะเข้าเลย

รูปเดียวอยู่หมัดเลย 55555+ แอบแว๊บไปวาดรูปมา โดยที่ความแตกต่างแต่ละอันจะมี จุดแข็งกับจุดด้อย แบบนี้

1. Add ตามภาพ คือ การเพิ่มขึ้นเรื่อยๆ แสดงว่า ถ้าหากเรา add ไปเรื่อยๆ Fragment จะเกิดการซ๋อนกันตามภาพ

ข้อดี — เพิ่มเรื่อยๆ เวลาลบไม่มีผลอะไรมากเพราะมีตัวเก่าอยู่ด้านหลัง สามารถใช้คำสั่ง ลบ Fragment ควบคู่ไปได้

ข้อเสีย — ยิ่งมีจำนวนมากก็ยิ่งทำให้ App เรา Performance ลดลงไปด้วย

2. Replace ตามภาพคือ การแปะทับไปเรื่อยๆ อันนี้เจ้าของบทความบอกว่า Dev ส่วนใหญ่นิยมใช้กัน เพราะว่า มันไม่มีการเพิ่มของ Fragment ถึงแม้เราจะมีสัก 100 Fragment แต่ถ้าทุก Fragment มีการใช้Replace 100 หน้าจะถูกรวบเป็นหน้าเดียว ทำให้ App มี Performance ขึ้นมามากเลยทีเดียว

ข้อดี — มี Fragment สัก 100 หน้าก็ไม่มีปัญหา บริหารทรัพยากรได้ง่ายๆ นิยมใช้คู่กับ addToBackStack

ข้อเสีย — เพราะมีหน้าเดียวหากเราไม่มีการ backStack เอาไว้จะทำให้ Fragment เราหายไปเลย

3. Remove ตามภาพคือ การลบ Fragment ที่มีอยู่ให้หายไปนั้นเอง ตรงส่วนนี้ขอไม่เขียนข้อดีและข้อเสียนะ เพราะว่า นิยมเอาไปใช้ในการสนับสนุนการใช้ Add กับ Replace นั้นเอง

4.addToBackStack ตามภาพ คือ การ มี Fragment อยู่ข้างล่างอันนึง แล้วเพิ่ม Fragment อันใหม่ข้างบน คำถามคือ ต่างกับ Add ยังไง ถูกปะ เพราะว่า จากภาพมันก็เหมือนกันนิ ซึ่งความแตกต่างของมันคือ การที่เราเรียกคำสั่งไง ถามว่า การ add เราไม่ต้องเรียก addToBackStack ก็สามารถ มี Fragment เพิ่มขึ้นได้ เพียงแต่การใช้ addToBackStack นิยมใช้คู่กับ การ Replace แทนเพราะว่า การ Replace ทำให้ไม่มี Fragment เหลืออยู่เลย ทาง Google ก็เลย ใช้วิธีนี้ในการเพิ่ม Fragment ให้ ในกรณีที่ผู้ใช้ ใช้คำสั่งแบบ Replace

สรุปสำหรับบทความนี้ เจ้าของบทความก็ได้อธิบายถึงความสามารถของ Fragment เพิ่มเติม แล้วก็คำสั่ง Add , Replace , remove, addToBackStack ให้ผู้ที่หลงเข้ามาอ่าน เลือกใช้งานให้เหมาะสม ซึ่งจริงๆส่วนใหญ่ คำสั่ง remove จะสนับสนุนการใช้การคำสั่ง Add ส่วน addToBackStack จะเอามาสนับสนุนคำสั่ง Replace ซะมากกว่า จะถูกเรียกใช้งานเป็น Main หลักนะ เลือกให้เหมาะสมกับงานของตัวเอง จะเป็นการดีที่สุด และ หากใครไม่เข้าใจแนะนำลองทำตามดู จะได้เข้าใจได้มากขึ้นนะ สำหรับวันนี้เจ้าของบทความขอตัวไปทำงานต่อแล้วนะ ไว้เจอกันบทความหน้านะ อย่าลืมติดตามกันด้วยนะจ๊ะ ^_^