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

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

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

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

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

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

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

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

เมื่อใดก็ตามที่รายการมีการเปลี่ยนแปลง RecyclerView จะใช้ภาพเคลื่อนไหว เพื่อเปลี่ยนลักษณะที่ปรากฏ ผู้สร้างภาพเคลื่อนไหวนี้เป็นวัตถุที่ขยายนามธรรม RecyclerView.ItemAnimator โดยค่าเริ่มต้น RecyclerView จะใช้ วันที่ DefaultItemAnimator ในการมอบภาพเคลื่อนไหว หากต้องการจัดเตรียมภาพเคลื่อนไหวที่กำหนดเอง คุณจะทำสิ่งต่อไปนี้ได้ กำหนดออบเจ็กต์แอนิเมเตอร์ของคุณเองโดยการขยาย 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 ต้องใช้รหัสนี้เนื่องจาก กิจกรรมหรือส่วนย่อยอาจมี รายการที่แตกต่างกันและเลือกได้ได้มากกว่า 1 รายการ ซึ่งทั้งหมดจะต้องคงอยู่ในสถานะที่บันทึกไว้

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

โปรดดูข้อมูลอ้างอิงต่อไปนี้สำหรับข้อมูลเพิ่มเติม