ปรับแต่งรายการแบบไดนามิก ส่วนหนึ่งของ Android Jetpack
คุณปรับแต่ง
RecyclerView
ออบเจ็กต์ให้ตรงกับความต้องการเฉพาะได้ คลาสมาตรฐานที่อธิบายไว้ในสร้างรายการแบบไดนามิกด้วย
RecyclerView มีฟังก์ชันทั้งหมดที่นักพัฒนาแอปส่วนใหญ่ต้องการ ใน
หลายกรณี คุณเพียงแค่ต้องออกแบบมุมมองสำหรับผู้ถือมุมมองแต่ละรายและเขียน
โค้ดเพื่ออัปเดตมุมมองเหล่านั้นด้วยข้อมูลที่เหมาะสม อย่างไรก็ตาม หากแอปมี
ข้อกำหนดเฉพาะ คุณสามารถแก้ไขลักษณะการทำงานมาตรฐานได้หลายวิธี
เอกสารนี้จะอธิบายการปรับแต่งบางอย่างที่อาจทำได้
แก้ไขเลย์เอาต์
RecyclerView
ใช้เครื่องมือจัดการเลย์เอาต์เพื่อจัดตำแหน่งแต่ละรายการบนหน้าจอ และเพื่อกำหนดเวลาที่จะนำมุมมองรายการที่ผู้ใช้มองไม่เห็นอีกต่อไปมาใช้ซ้ำ หากต้องการนำมุมมองกลับมาใช้ซ้ำหรือรีไซเคิล มุมมองนั้น ตัวจัดการเลย์เอาต์
อาจขอให้อะแดปเตอร์แทนที่เนื้อหาของมุมมองด้วย
องค์ประกอบอื่นจากชุดข้อมูล การนำยอดดูมาใช้ซ้ำด้วยวิธีนี้จะช่วยปรับปรุง
ประสิทธิภาพโดยหลีกเลี่ยงการสร้างยอดดูที่ไม่จำเป็นหรือการค้นหา
ที่มีค่าใช้จ่ายสูง
findViewById()
ไลบรารีการสนับสนุนของ Android มีเครื่องมือจัดการเลย์เอาต์มาตรฐาน 3 รายการ
ซึ่งแต่ละรายการมีตัวเลือกการปรับแต่งมากมาย
LinearLayoutManager
จัดเรียงรายการในลิสต์แบบ 1 มิติ การใช้RecyclerView
กับLinearLayoutManager
จะมีฟังก์ชันการทำงาน เหมือนกับเลย์เอาต์ListView
GridLayoutManager
จัดเรียงรายการในตาราง 2 มิติ เช่น สี่เหลี่ยมจัตุรัสบน กระดานหมากรุก การใช้RecyclerView
กับGridLayoutManager
จะมีฟังก์ชันการทำงานเหมือนกับเลย์เอาต์GridView
StaggeredGridLayoutManager
: จัดเรียงรายการในตาราง 2 มิติ โดยแต่ละคอลัมน์จะออฟเซ็ตเล็กน้อย จากคอลัมน์ก่อนหน้า เช่นเดียวกับดาวบนธงชาติอเมริกา
หากตัวจัดการเลย์เอาต์เหล่านี้ไม่ตรงกับความต้องการ คุณก็สร้างตัวจัดการเลย์เอาต์ของคุณเองได้โดย
ขยาย
RecyclerView.LayoutManager
คลาสแบบนามธรรม
เพิ่มภาพเคลื่อนไหวของรายการ
เมื่อใดก็ตามที่ไอเทมมีการเปลี่ยนแปลง RecyclerView
จะใช้แอนิเมเตอร์
เพื่อเปลี่ยนลักษณะที่ปรากฏ Animator นี้เป็นออบเจ็กต์ที่ขยายคลาส
RecyclerView.ItemAnimator
นามธรรม โดยค่าเริ่มต้น RecyclerView
จะใช้
DefaultItemAnimator
เพื่อแสดงภาพเคลื่อนไหว หากต้องการระบุภาพเคลื่อนไหวที่กำหนดเอง คุณสามารถ
กำหนดออบเจ็กต์ Animator ของคุณเองได้โดยการขยาย
RecyclerView.ItemAnimator
เปิดใช้การเลือกรายการ
ไลบรารี
recyclerview-selection
ช่วยให้ผู้ใช้เลือกรายการในลิสต์ RecyclerView
โดยใช้การป้อนข้อมูลด้วยการสัมผัส
หรือเมาส์ ซึ่งจะช่วยให้คุณควบคุมการนำเสนอภาพของ
รายการที่เลือกได้ นอกจากนี้ คุณยังคงควบคุมนโยบายที่ควบคุมลักษณะการทำงานของการเลือกได้ เช่น รายการใดมีสิทธิ์สำหรับการเลือกและเลือกได้กี่รายการ
หากต้องการเพิ่มการรองรับการเลือกไปยังอินสแตนซ์ RecyclerView
ให้ทำตามขั้นตอนต่อไปนี้
- กำหนดประเภทคีย์การเลือกที่จะใช้ แล้วสร้าง
ItemKeyProvider
คุณใช้ประเภทคีย์หลัก 3 ประเภทเพื่อระบุรายการที่เลือกได้ ดังนี้
Parcelable
และคลาสย่อย เช่นUri
String
Long
ดูข้อมูลโดยละเอียดเกี่ยวกับประเภทคีย์การเลือกได้ที่
SelectionTracker.Builder
- ใช้งาน
ItemDetailsLookup
- อัปเดตออบเจ็กต์
View
ในRecyclerView
เพื่อแสดงว่าผู้ใช้เลือกหรือยกเลิกการเลือกออบเจ็กต์ไลบรารีการเลือกไม่ได้ตกแต่งภาพเริ่มต้นสำหรับ รายการที่เลือก ระบุข้อมูลนี้เมื่อคุณติดตั้งใช้งาน
onBindViewHolder()
เราขอแนะนำให้ใช้วิธีต่อไปนี้- ใน
onBindViewHolder()
ให้เรียกsetActivated()
—ไม่ใช่setSelected()
—ใน ออบเจ็กต์View
ด้วยtrue
หรือfalse
ขึ้นอยู่กับว่ามีการเลือกรายการ หรือไม่ - อัปเดตสไตล์ของมุมมองเพื่อแสดงสถานะที่เปิดใช้งาน เรา ขอแนะนำให้ใช้ทรัพยากรรายการ สถานะสีเพื่อกำหนดค่าการจัดรูปแบบ
- ใน
- ใช้
ActionMode
เพื่อมอบเครื่องมือให้ผู้ใช้ดำเนินการกับการเลือก - ดำเนินการรองที่ตีความแล้ว
- ประกอบทุกอย่างด้วย
SelectionTracker.Builder
- รวมการเลือกในเหตุการณ์วงจร กิจกรรม
ItemDetailsLookup
อนุญาตให้คลังการเลือกเข้าถึง
ข้อมูลเกี่ยวกับรายการ RecyclerView
โดยใช้ MotionEvent
ซึ่งเป็นเหมือนโรงงานสำหรับอินสแตนซ์ ItemDetails
ที่ได้รับการสำรองข้อมูลหรือดึงข้อมูลจากอินสแตนซ์ RecyclerView.ViewHolder
ลงทะเบียน
SelectionTracker.SelectionObserver
เพื่อรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงการเลือก เมื่อสร้างการเลือกเป็นครั้งแรก ให้เริ่ม ActionMode
เพื่อแสดงการเลือกนี้ต่อผู้ใช้และระบุการดำเนินการเฉพาะการเลือก เช่น คุณสามารถเพิ่มปุ่มลบลงใน
ActionMode
แถบและเชื่อมต่อลูกศรย้อนกลับในแถบเพื่อล้าง
การเลือก เมื่อไม่มีการเลือก (หากผู้ใช้ล้างการเลือกครั้งล่าสุด) ให้สิ้นสุดโหมดการดำเนินการ
ที่ส่วนท้ายของไปป์ไลน์การประมวลผลเหตุการณ์ ไลบรารีอาจพิจารณา
ว่าผู้ใช้พยายามเปิดใช้งานรายการโดยการแตะ หรือพยายาม
ลากรายการหรือชุดรายการที่เลือก ตอบสนองต่อการตีความเหล่านี้
โดยลงทะเบียน Listener ที่เหมาะสม ดูข้อมูลเพิ่มเติมได้ที่
SelectionTracker.Builder
ตัวอย่างต่อไปนี้แสดงวิธีรวมชิ้นส่วนเหล่านี้เข้าด้วยกัน
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
หากต้องการสร้างอินสแตนซ์
SelectionTracker
แอปของคุณต้องระบุ
RecyclerView.Adapter
เดียวกันกับที่คุณใช้เพื่อเริ่มต้น RecyclerView
เป็น
SelectionTracker.Builder
ด้วยเหตุนี้ หลังจากสร้างอินสแตนซ์
SelectionTracker
แล้ว ให้แทรกอินสแตนซ์ลงใน
RecyclerView.Adapter
มิฉะนั้น คุณจะตรวจสอบสถานะที่เลือกของสินค้าจากonBindViewHolder()
ไม่ได้
หากต้องการรักษาสถานะการเลือกในเหตุการณ์วงจรของกิจกรรม แอปของคุณ
ต้องเรียกใช้
onSaveInstanceState()
และ
onRestoreInstanceState()
ของเครื่องมือติดตามการเลือกจากเมธอด
onSaveInstanceState()
และ
onRestoreInstanceState()
ของกิจกรรมตามลำดับ แอปของคุณต้องระบุรหัสการเลือกที่ไม่ซ้ำกันให้กับ
SelectionTracker.Builder
ตัวสร้างด้วย ต้องใช้รหัสนี้เนื่องจาก
กิจกรรมหรือ Fragment อาจมีรายการที่เลือกได้และแตกต่างกันมากกว่า 1 รายการ
ซึ่งทั้งหมดต้องคงอยู่ในสถานะที่บันทึกไว้
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลต่อไปนี้
- แอปเดโม Sunflowerซึ่งใช้
RecyclerView
- Codelab ใช้ RecyclerView เพื่อแสดงรายการที่เลื่อนได้
- Codelab Android Kotlin Fundamentals: หลักพื้นฐานของ RecyclerView