ปรับแต่งรายการแบบไดนามิก เป็นส่วนหนึ่งของ Android Jetpack
โดยคุณสามารถปรับแต่ง
RecyclerView
ให้ตรงกับความต้องการที่เฉพาะเจาะจงของคุณ ชั้นเรียนมาตรฐานที่อธิบายไว้ใน
สร้างรายการแบบไดนามิกด้วย
RecyclerView มีฟังก์ชันการทำงานทั้งหมดที่นักพัฒนาซอฟต์แวร์ส่วนใหญ่ต้องการ ใน
หลายกรณี คุณเพียงต้องออกแบบมุมมองสำหรับผู้ถือมุมมองแต่ละราย และเขียน
เพื่ออัปเดตมุมมองเหล่านั้นด้วยข้อมูลที่เหมาะสม อย่างไรก็ตาม หากแอปมีข้อกําหนดเฉพาะ คุณสามารถแก้ไขลักษณะการทํางานมาตรฐานได้หลายวิธี
เอกสารนี้อธิบายการกำหนดค่าที่เป็นไปได้บางส่วน
แก้ไขเลย์เอาต์
RecyclerView
ใช้เครื่องมือจัดการเลย์เอาต์เพื่อวางตำแหน่งบุคคล
รายการบนหน้าจอ และพิจารณาว่าเมื่อใดที่ควรใช้การดูรายการที่ไม่อีกต่อไปแล้วซ้ำ
แสดงต่อผู้ใช้ หากต้องการใช้ซ้ำหรือรีไซเคิล - มุมมอง เลย์เอาต์
ผู้จัดการอาจขอให้อะแดปเตอร์แทนที่เนื้อหาของมุมมองด้วย
เอลิเมนต์ที่แตกต่างจากชุดข้อมูล การรีไซเคิลมุมมองด้วยวิธีนี้ช่วยปรับปรุง
โดยหลีกเลี่ยงการสร้างมุมมองหรือ
แพง
findViewById()
การค้นหา ไลบรารีการสนับสนุนของ Android ประกอบด้วยเครื่องมือจัดการเลย์เอาต์มาตรฐาน 3 รูปแบบ
มีตัวเลือกการปรับแต่งมากมายดังนี้
LinearLayoutManager
: จัดเรียงรายการในลิสต์มิติข้อมูลเดียว การใช้RecyclerView
ที่มีLinearLayoutManager
ให้ เช่นListView
เลย์เอาต์GridLayoutManager
: จัดเรียงรายการในตาราง 2 มิติ เช่น สี่เหลี่ยมจัตุรัสบนกระดานหมากรุก การใช้RecyclerView
กับGridLayoutManager
จะให้ฟังก์ชันการทำงานเหมือนกับเลย์เอาต์GridView
StaggeredGridLayoutManager
: จัดเรียงสินค้าเป็นตารางกริด 2 มิติ โดยให้แต่ละคอลัมน์ออฟเซ็ตเล็กน้อย จากแบบก่อนหน้านี้ เช่น ดาวบนธงชาติอเมริกา
หากเครื่องมือจัดการเลย์เอาต์เหล่านี้ไม่เหมาะกับความต้องการของคุณ คุณก็สร้างเครื่องมือจัดการของคุณเองได้โดยการขยายRecyclerView.LayoutManager
คลาส抽象
เพิ่มภาพเคลื่อนไหวของสินค้า
เมื่อใดก็ตามที่รายการมีการเปลี่ยนแปลง RecyclerView
จะใช้ภาพเคลื่อนไหว
เพื่อเปลี่ยนลักษณะที่ปรากฏ ผู้สร้างภาพเคลื่อนไหวนี้เป็นวัตถุที่ขยายนามธรรม
RecyclerView.ItemAnimator
โดยค่าเริ่มต้น RecyclerView
จะใช้ DefaultItemAnimator
เพื่อแสดงภาพเคลื่อนไหว หากต้องการจัดเตรียมภาพเคลื่อนไหวที่กำหนดเอง คุณจะทำสิ่งต่อไปนี้ได้
กำหนดออบเจ็กต์แอนิเมเตอร์ของคุณเองโดยการขยาย
RecyclerView.ItemAnimator
เปิดใช้การเลือกรายการในลิสต์
ไลบรารี recyclerview-selection
ช่วยให้ผู้ใช้เลือกรายการในรายการ RecyclerView
ได้โดยใช้การป้อนข้อมูลด้วยการสัมผัสหรือเมาส์ ซึ่งช่วยให้คุณสามารถควบคุมการนำเสนอด้วยภาพของ
รายการที่เลือก นอกจากนี้ คุณยังควบคุมนโยบายที่ควบคุมลักษณะการทํางานของการเลือกได้ด้วย เช่น รายการที่มีสิทธิ์เลือกและจํานวนรายการที่เลือกได้
หากต้องการเพิ่มการสนับสนุนการเลือกไปยังอินสแตนซ์ RecyclerView
ให้ทำตาม
ขั้นตอนเหล่านี้:
- พิจารณาว่าจะใช้คีย์การเลือกประเภทใดแล้วสร้าง
ItemKeyProvider
มี 3 ประเภทหลักที่คุณสามารถใช้เพื่อระบุรายการที่เลือก:
Parcelable
และคลาสย่อย เช่นUri
String
Long
ดูข้อมูลโดยละเอียดเกี่ยวกับประเภทคีย์การเลือกได้ที่
SelectionTracker.Builder
- ใช้งาน
ItemDetailsLookup
- อัปเดตออบเจ็กต์
View
ในRecyclerView
เพื่อแสดงว่าผู้ใช้เลือกหรือยกเลิกการเลือกออบเจ็กต์หรือไม่ไลบรารีการเลือกไม่มีการตกแต่งภาพเริ่มต้นสำหรับ รายการที่เลือก ระบุข้อมูลนี้เมื่อติดตั้งใช้งาน
onBindViewHolder()
เราขอแนะนำให้ใช้วิธีการต่อไปนี้- ใน
onBindViewHolder()
ให้เรียกใช้setActivated()
notsetSelected()
บนออบเจ็กต์View
ด้วยtrue
หรือfalse
โดยขึ้นอยู่กับว่ามีการเลือกรายการหรือไม่ - อัปเดตการจัดรูปแบบของมุมมองเพื่อแสดงสถานะ "เปิดใช้งาน" เราขอแนะนำให้ใช้ทรัพยากรรายการสถานะสีเพื่อกำหนดค่าการจัดรูปแบบ
- ใน
- ใช้
ActionMode
เพื่อให้ผู้ใช้มีเครื่องมือในการดําเนินการกับสิ่งที่เลือก - ดำเนินการรองที่ตีความแล้ว
- รวบรวมทุกอย่างด้วย
SelectionTracker.Builder
- รวมการเลือกไว้ในเหตุการณ์วงจรของกิจกรรม
ItemDetailsLookup
อนุญาตให้เข้าถึงคลังส่วนที่เลือก
ข้อมูลเกี่ยวกับ RecyclerView
รายการโดย
MotionEvent
ซึ่งเป็นโรงงานสำหรับ
ItemDetails
อินสแตนซ์ที่สำรองข้อมูลหรือดึงข้อมูลจาก
RecyclerView.ViewHolder
อินสแตนซ์
ลงทะเบียน SelectionTracker.SelectionObserver
เพื่อรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงรายการที่เลือก เมื่อสร้างการเลือกเป็นครั้งแรก ให้เริ่ม ActionMode
เพื่อแสดงการเลือกนี้ต่อผู้ใช้และดำเนินการเฉพาะการเลือก เช่น คุณสามารถเพิ่มปุ่มลบลงในส่วน
ActionMode
และเชื่อมต่อลูกศรย้อนกลับบนแถบเพื่อล้าง
รายการที่เลือก เมื่อไม่มีรายการที่เลือกแล้ว (หากผู้ใช้ล้างการเลือกครั้งล่าสุด) ให้สิ้นสุดโหมดการดำเนินการ
ในตอนท้ายของไปป์ไลน์การประมวลผลเหตุการณ์ ไลบรารีอาจกำหนด
ผู้ใช้พยายามเปิดใช้งาน โดยการแตะที่รายการนั้น หรือ
การพยายามลากรายการหรือชุดของรายการที่เลือก ตอบสนองต่อคําอธิบายเหล่านี้โดยลงทะเบียนโปรแกรมฟังที่เหมาะสม ดูข้อมูลเพิ่มเติมได้ที่ 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
ด้วย คุณต้องใช้รหัสนี้เนื่องจากกิจกรรมหรือข้อมูลโค้ดอาจมีรายการที่เลือกได้ซึ่งแตกต่างกันมากกว่า 1 รายการ ซึ่งรายการทั้งหมดต้องคงอยู่ในสถานะที่บันทึกไว้
แหล่งข้อมูลเพิ่มเติม
โปรดดูข้อมูลอ้างอิงต่อไปนี้สำหรับข้อมูลเพิ่มเติม
- แอปสาธิต Sunflower
ซึ่งใช้
RecyclerView
- Codelab ใช้ RecyclerView เพื่อแสดงรายการที่เลื่อนได้
- Android หลักพื้นฐานของ Kotlin: หลักพื้นฐานของ RecyclerView ใน Codelab