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

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

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

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

RecyclerView ใช้เครื่องมือจัดการเลย์เอาต์เพื่อจัดตำแหน่งแต่ละรายการบนหน้าจอ และเพื่อกำหนดเวลาที่จะนำมุมมองรายการที่ผู้ใช้มองไม่เห็นแล้วกลับมาใช้ซ้ำ หากต้องการนำมุมมองกลับมาใช้ซ้ำหรือรีไซเคิล มุมมอง ผู้จัดการเลย์เอาต์ อาจขอให้อะแดปเตอร์แทนที่เนื้อหาของมุมมองด้วย องค์ประกอบอื่นจากชุดข้อมูล การรีไซเคิลมุมมองด้วยวิธีนี้จะช่วยปรับปรุง ประสิทธิภาพโดยหลีกเลี่ยงการสร้างมุมมองที่ไม่จำเป็นหรือการดำเนินการ ค้นหาfindViewById() ที่มีค่าใช้จ่ายสูง ไลบรารีการสนับสนุนของ Android มี LayoutManager มาตรฐาน 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()not setSelected()—on ออบเจ็กต์ 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 รายการ ซึ่งทั้งหมดต้องคงอยู่ในสถานะที่บันทึกไว้

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

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