ปรับแต่งรายการแบบไดนามิก   เป็นส่วนหนึ่งของ Android Jetpack

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีทำงานกับเลย์เอาต์ใน Compose

คุณสามารถปรับแต่ง RecyclerView ออบเจ็กต์ให้ตรงกับความต้องการที่เฉพาะเจาะจงได้ คลาสมาตรฐานที่อธิบายไว้ในสร้างรายการแบบไดนามิกด้วย RecyclerView มีฟังก์ชันการทำงานทั้งหมดที่นักพัฒนาแอปส่วนใหญ่ต้องการ ในหลายกรณี คุณเพียงแค่ออกแบบมุมมองสำหรับ ViewHolder แต่ละรายการและเขียนโค้ดเพื่ออัปเดตมุมมองเหล่านั้นด้วยข้อมูลที่เหมาะสม อย่างไรก็ตาม หากแอปมีข้อกำหนดเฉพาะ คุณสามารถแก้ไขลักษณะการทำงานมาตรฐานได้หลายวิธี เอกสารนี้จะอธิบายการปรับแต่งบางอย่างที่เป็นไปได้

แก้ไขเลย์เอาต์

RecyclerView ใช้เครื่องมือจัดการเลย์เอาต์เพื่อจัดตำแหน่งรายการแต่ละรายการบนหน้าจอและกำหนดเวลาที่จะนำมุมมองรายการที่ผู้ใช้มองไม่เห็นแล้วกลับมาใช้ใหม่ หากต้องการนำมุมมองกลับมาใช้ซ้ำหรือรีไซเคิล ผู้จัดการเลย์เอาต์อาจขอให้อะแดปเตอร์แทนที่เนื้อหาของมุมมองด้วยองค์ประกอบอื่นจากชุดข้อมูล การรีไซเคิลมุมมองด้วยวิธีนี้จะช่วยปรับปรุงประสิทธิภาพโดยหลีกเลี่ยงการสร้างมุมมองที่ไม่จำเป็นหรือการค้นหา findViewById() ที่มีค่าใช้จ่ายสูง ไลบรารีการสนับสนุนของ Android มี LayoutManager มาตรฐาน 3 รายการ ซึ่งแต่ละรายการมีตัวเลือกการปรับแต่งมากมาย ดังนี้

  • LinearLayoutManager: จัดเรียงรายการในรายการแบบมิติเดียว การใช้ RecyclerView กับ LinearLayoutManager จะมีฟังก์ชันการทำงานเหมือนกับเลย์เอาต์ ListView
  • GridLayoutManager: จัดเรียงรายการในตารางกริด 2 มิติ เช่น สี่เหลี่ยมจัตุรัสบนกระดานหมากรุก การใช้ RecyclerView กับ GridLayoutManager จะมีฟังก์ชันการทำงานเหมือนกับเลย์เอาต์ GridView
  • StaggeredGridLayoutManager: จัดเรียงรายการในตารางกริด 2 มิติ โดยแต่ละคอลัมน์จะเยื้องกันเล็กน้อยจากคอลัมน์ก่อนหน้า เช่นเดียวกับดาวบนธงชาติอเมริกา

หาก LayoutManager เหล่านี้ไม่ตรงกับความต้องการ คุณสามารถสร้าง LayoutManager ของคุณเองได้โดยขยายคลาสแอบสแตรกต์ RecyclerView.LayoutManager

เพิ่มภาพเคลื่อนไหวของรายการ

เมื่อใดก็ตามที่รายการมีการเปลี่ยนแปลง RecyclerView จะใช้ animator เพื่อเปลี่ยนลักษณะที่ปรากฏ Animator นี้เป็นออบเจ็กต์ที่ขยายคลาส RecyclerView.ItemAnimator นามธรรม โดยค่าเริ่มต้น RecyclerView จะใช้ DefaultItemAnimator เพื่อแสดงภาพเคลื่อนไหว หากต้องการแสดงภาพเคลื่อนไหวที่กำหนดเอง คุณสามารถกำหนดออบเจ็กต์ Animator ของคุณเองได้โดยขยาย RecyclerView.ItemAnimator

เปิดใช้การเลือกรายการในลิสต์

ไลบรารี recyclerview-selection ช่วยให้ผู้ใช้เลือกรายการในรายการ RecyclerView โดยใช้การสัมผัสหรืออินพุตจากเมาส์ได้ ซึ่งจะช่วยให้คุณควบคุมการนำเสนอภาพของรายการที่เลือกได้ นอกจากนี้ คุณยังควบคุมนโยบายที่ควบคุมลักษณะการเลือกได้ด้วย เช่น รายการใดมีสิทธิ์เลือกและเลือกได้กี่รายการ

หากต้องการเพิ่มการรองรับการเลือกไปยังอินสแตนซ์ RecyclerView ให้ทำตามขั้นตอนต่อไปนี้

  1. กำหนดประเภทคีย์การเลือกที่จะใช้ แล้วสร้าง ItemKeyProvider

    คุณใช้คีย์ได้ 3 ประเภทเพื่อระบุรายการที่เลือก ดังนี้

    ดูข้อมูลโดยละเอียดเกี่ยวกับประเภทคีย์การเลือกได้ที่ SelectionTracker.Builder

  2. ใช้ ItemDetailsLookup
  3. ItemDetailsLookup ช่วยให้ไลบรารีการเลือกเข้าถึงข้อมูลเกี่ยวกับรายการ RecyclerView ที่มี MotionEvent ได้ ซึ่งเป็นโรงงานสำหรับอินสแตนซ์ ItemDetails ที่สำรองข้อมูลหรือดึงข้อมูลมาจากอินสแตนซ์ RecyclerView.ViewHolder

  4. อัปเดตออบเจ็กต์ View ใน RecyclerView เพื่อแสดงว่าผู้ใช้เลือกหรือยกเลิกการเลือกรายการเหล่านั้น

    ไลบรารีการเลือกไม่มีการตกแต่งภาพเริ่มต้นสำหรับรายการที่เลือก ระบุข้อมูลนี้เมื่อคุณใช้ onBindViewHolder() เราขอแนะนำให้ใช้วิธีการต่อไปนี้

    • ใน onBindViewHolder() ให้เรียกใช้ setActivated() (ไม่ใช่ setSelected()) ในออบเจ็กต์ View ด้วย true หรือ false โดยขึ้นอยู่กับว่ามีการเลือกรายการหรือไม่
    • อัปเดตการจัดรูปแบบของมุมมองเพื่อแสดงสถานะที่เปิดใช้งาน เราขอแนะนำให้ใช้ทรัพยากรรายการสถานะสีเพื่อกำหนดค่าการจัดสไตล์
  5. ใช้ ActionMode เพื่อให้ผู้ใช้มีเครื่องมือในการดำเนินการกับสิ่งที่เลือก
  6. ลงทะเบียน SelectionTracker.SelectionObserver เพื่อรับการแจ้งเตือนเมื่อมีการเปลี่ยนแปลงการเลือก เมื่อสร้างการเลือกเป็นครั้งแรก ให้เริ่ม ActionMode เพื่อแสดงการเลือกนี้ต่อผู้ใช้และระบุการดำเนินการเฉพาะการเลือก เช่น คุณสามารถเพิ่มปุ่มลบลงในแถบ ActionMode และเชื่อมต่อลูกศรย้อนกลับบนแถบเพื่อล้างการเลือกได้ เมื่อการเลือกว่างเปล่า หากผู้ใช้ล้างการเลือกครั้งล่าสุด ให้สิ้นสุดโหมดการดำเนินการ

  7. ดำเนินการรองที่ตีความได้
  8. เมื่อสิ้นสุดไปป์ไลน์การประมวลผลเหตุการณ์ ไลบรารีอาจระบุว่าผู้ใช้พยายามเปิดใช้งานรายการโดยแตะรายการนั้น หรือพยายามลากรายการหรือชุดรายการที่เลือก ตอบสนองต่อการตีความเหล่านี้โดยลงทะเบียน Listener ที่เหมาะสม ดูข้อมูลเพิ่มเติมได้ที่ SelectionTracker.Builder

  9. ประกอบทุกอย่างเข้าด้วยกันโดยใช้ SelectionTracker.Builder
  10. ตัวอย่างต่อไปนี้แสดงวิธีนำองค์ประกอบเหล่านี้มารวมกัน

    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() ได้

  11. รวมการเลือกไว้ในเหตุการณ์วงจรกิจกรรม
  12. หากต้องการรักษาสถานะการเลือกไว้ตลอดเหตุการณ์ในวงจรกิจกรรม แอปของคุณต้องเรียกใช้เมธอด onSaveInstanceState() และ onRestoreInstanceState() ของเครื่องมือติดตามการเลือกจากเมธอด onSaveInstanceState() และ onRestoreInstanceState() ของกิจกรรมตามลำดับ นอกจากนี้ แอปของคุณต้องระบุรหัสการเลือกที่ไม่ซ้ำกันให้กับเครื่องมือสร้าง SelectionTracker.Builder ด้วย รหัสนี้จำเป็นเนื่องจากกิจกรรมหรือ Fragment อาจมีรายการที่เลือกได้และแตกต่างกันมากกว่า 1 รายการ ซึ่งทั้งหมดต้องคงอยู่ในสถานะที่บันทึกไว้

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมได้จากข้อมูลอ้างอิงต่อไปนี้