ปรับแต่งรายการแบบไดนามิก เป็นส่วนหนึ่งของ Android Jetpack
คุณสามารถปรับแต่ง
RecyclerView
ออบเจ็กต์ให้ตรงกับความต้องการที่เฉพาะเจาะจงได้ คลาสมาตรฐานที่อธิบายไว้ในสร้างรายการแบบไดนามิกด้วย RecyclerView มีฟังก์ชันการทำงานทั้งหมดที่นักพัฒนาแอปส่วนใหญ่ต้องการ ในหลายกรณี คุณเพียงแค่ออกแบบมุมมองสำหรับ ViewHolder แต่ละรายการและเขียนโค้ดเพื่ออัปเดตมุมมองเหล่านั้นด้วยข้อมูลที่เหมาะสม อย่างไรก็ตาม หากแอปมีข้อกำหนดเฉพาะ คุณสามารถแก้ไขลักษณะการทำงานมาตรฐานได้หลายวิธี
เอกสารนี้จะอธิบายการปรับแต่งบางอย่างที่เป็นไปได้
แก้ไขเลย์เอาต์
RecyclerView ใช้เครื่องมือจัดการเลย์เอาต์เพื่อจัดตำแหน่งรายการแต่ละรายการบนหน้าจอและกำหนดเวลาที่จะนำมุมมองรายการที่ผู้ใช้มองไม่เห็นแล้วกลับมาใช้ใหม่ หากต้องการนำมุมมองกลับมาใช้ซ้ำหรือรีไซเคิล ผู้จัดการเลย์เอาต์อาจขอให้อะแดปเตอร์แทนที่เนื้อหาของมุมมองด้วยองค์ประกอบอื่นจากชุดข้อมูล การรีไซเคิลมุมมองด้วยวิธีนี้จะช่วยปรับปรุงประสิทธิภาพโดยหลีกเลี่ยงการสร้างมุมมองที่ไม่จำเป็นหรือการค้นหา findViewById() ที่มีค่าใช้จ่ายสูง ไลบรารีการสนับสนุนของ Android มี LayoutManager มาตรฐาน 3 รายการ ซึ่งแต่ละรายการมีตัวเลือกการปรับแต่งมากมาย ดังนี้
LinearLayoutManager: จัดเรียงรายการในรายการแบบมิติเดียว การใช้RecyclerViewกับLinearLayoutManagerจะมีฟังก์ชันการทำงานเหมือนกับเลย์เอาต์ListViewGridLayoutManager: จัดเรียงรายการในตารางกริด 2 มิติ เช่น สี่เหลี่ยมจัตุรัสบนกระดานหมากรุก การใช้RecyclerViewกับGridLayoutManagerจะมีฟังก์ชันการทำงานเหมือนกับเลย์เอาต์GridViewStaggeredGridLayoutManager: จัดเรียงรายการในตารางกริด 2 มิติ โดยแต่ละคอลัมน์จะเยื้องกันเล็กน้อยจากคอลัมน์ก่อนหน้า เช่นเดียวกับดาวบนธงชาติอเมริกา
หาก LayoutManager เหล่านี้ไม่ตรงกับความต้องการ คุณสามารถสร้าง LayoutManager ของคุณเองได้โดยขยายคลาสแอบสแตรกต์ RecyclerView.LayoutManager
เพิ่มภาพเคลื่อนไหวของรายการ
เมื่อใดก็ตามที่รายการมีการเปลี่ยนแปลง RecyclerView จะใช้ animator เพื่อเปลี่ยนลักษณะที่ปรากฏ Animator นี้เป็นออบเจ็กต์ที่ขยายคลาส RecyclerView.ItemAnimator นามธรรม โดยค่าเริ่มต้น RecyclerView จะใช้ DefaultItemAnimator เพื่อแสดงภาพเคลื่อนไหว หากต้องการแสดงภาพเคลื่อนไหวที่กำหนดเอง คุณสามารถกำหนดออบเจ็กต์ Animator ของคุณเองได้โดยขยาย RecyclerView.ItemAnimator
เปิดใช้การเลือกรายการในลิสต์
ไลบรารี recyclerview-selection ช่วยให้ผู้ใช้เลือกรายการในรายการ RecyclerView โดยใช้การสัมผัสหรืออินพุตจากเมาส์ได้ ซึ่งจะช่วยให้คุณควบคุมการนำเสนอภาพของรายการที่เลือกได้ นอกจากนี้ คุณยังควบคุมนโยบายที่ควบคุมลักษณะการเลือกได้ด้วย เช่น รายการใดมีสิทธิ์เลือกและเลือกได้กี่รายการ
หากต้องการเพิ่มการรองรับการเลือกไปยังอินสแตนซ์ RecyclerView ให้ทำตามขั้นตอนต่อไปนี้
- กำหนดประเภทคีย์การเลือกที่จะใช้ แล้วสร้าง
ItemKeyProviderคุณใช้คีย์ได้ 3 ประเภทเพื่อระบุรายการที่เลือก ดังนี้
Parcelableและคลาสย่อย เช่นUriStringLong
ดูข้อมูลโดยละเอียดเกี่ยวกับประเภทคีย์การเลือกได้ที่
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 เพื่อแสดงรายการที่เลื่อนได้
- Android Kotlin Fundamentals: RecyclerView fundamentals Codelab