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

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

คุณปรับแต่ง 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 ให้ทำตามขั้นตอนต่อไปนี้

  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 รายการ ซึ่งทั้งหมดต้องคงอยู่ในสถานะที่บันทึกไว้

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

ดูข้อมูลเพิ่มเติมได้ที่แหล่งข้อมูลต่อไปนี้