1. ดูผู้ถือ
ใน ListView การกำหนดผู้ถือมุมมองเป็นแนวทางที่แนะนำสำหรับการเก็บการอ้างอิงสำหรับมุมมอง แต่มันไม่ใช่การบังคับ แม้ว่าจะไม่ทำเช่นนั้น แต่ ListView ใช้แสดงข้อมูลเก่า ข้อเสียเปรียบที่สำคัญอีกประการหนึ่งของการไม่ใช้ผู้ถือมุมมองอาจนำไปสู่การค้นหามุมมองโดยรหัสทุกครั้ง ซึ่งส่งผลให้รายการมุมมองล่าช้า
ปัญหานี้แก้ไขได้ใน RecylerView โดยใช้คลาส RecyclerView.ViewHolder นี่คือหนึ่งในความแตกต่างที่สำคัญใน RecyclerView และ ListView เมื่อใช้ RecyclerView คลาสนี้จะใช้เพื่อกำหนดวัตถุ ViewHolder ซึ่งใช้งานโดยอะแดปเตอร์เพื่อผูก ViewHolder กับตำแหน่ง อีกจุดที่ควรสังเกตที่นี่คือในขณะที่ใช้งานอะแดปเตอร์สำหรับ RecyclerView การให้ ViewHolder เป็นสิ่งจำเป็น สิ่งนี้ทำให้การใช้งานซับซ้อนเล็กน้อย แต่แก้ปัญหาที่พบใน ListView
2. เครื่องมือจัดการเค้าโครง
เมื่อพูดถึง ListViews จะมี ListView เพียงประเภทเดียวเท่านั้นเช่นแนวตั้ง ListView คุณไม่สามารถใช้ ListView ด้วยการเลื่อนในแนวนอน ฉันรู้ว่ามีวิธีที่จะใช้การเลื่อนในแนวนอน แต่เชื่อฉันว่ามันไม่ได้ออกแบบมาเพื่อทำงานในแบบนั้น
แต่ตอนนี้เมื่อเราดูที่ Android RecyclerView เทียบกับ ListView เราก็รองรับคอลเลกชันแนวนอนด้วย ในความเป็นจริงมันรองรับรายการหลายประเภท เพื่อสนับสนุนรายการหลายประเภทใช้คลาส RecyclerView.LayoutManager นี่คือสิ่งใหม่ที่ ListView ไม่มี RecyclerView รองรับเครื่องมือจัดการโครงร่างที่กำหนดไว้ล่วงหน้าสามประเภท:
LinearLayoutManager - นี่คือตัวจัดการเลย์เอาต์ที่ใช้บ่อยที่สุดในกรณีของ RecyclerView ผ่านสิ่งนี้เราสามารถสร้างรายการเลื่อนแนวนอนและแนวตั้ง StaggeredGridLayoutManager - ผ่านตัวจัดการเลย์เอาต์นี้เราสามารถสร้างรายการที่ถูกเซ เช่นเดียวกับหน้าจอ Pinterest GridLayoutManager– ตัวจัดการเลย์เอาต์นี้สามารถใช้แสดงกริดเช่นแกลเลอรี่รูปภาพใด ๆ
3. Item Animator
ภาพเคลื่อนไหวในรายการเป็นมิติใหม่ซึ่งมีความเป็นไปได้ไม่รู้จบ ใน ListView ทำให้ไม่มีข้อกำหนดพิเศษที่จะทำให้สามารถเพิ่มหรือลบรายการได้ แทนที่จะเป็นในภายหลังในขณะที่ Android พัฒนา ViewPropertyAnimator ได้รับการแนะนำโดย Chet Haase ของ Google ในบทแนะนำวิดีโอนี้สำหรับภาพเคลื่อนไหวใน ListView
ในทางตรงกันข้ามการเปรียบเทียบ Android RecyclerView เทียบกับ ListView มันมีคลาส RecyclerView.ItemAnimator สำหรับการจัดการภาพเคลื่อนไหว ผ่านภาพเคลื่อนไหวที่กำหนดเองระดับนี้สามารถกำหนดได้สำหรับการเพิ่มรายการการลบและย้ายกิจกรรม นอกจากนี้ยังมี DefaultItemAnimator ในกรณีที่คุณไม่ต้องการปรับแต่งใด ๆ
4. อะแดปเตอร์
ListView adapters นั้นง่ายต่อการนำไปใช้ พวกเขามีวิธีการหลัก getView ซึ่งเวทมนตร์ทั้งหมดเคยเกิดขึ้น มุมมองที่ถูกผูกไว้กับตำแหน่ง พวกเขาเคยมีเมธอด registerDataSetObserver ที่น่าสนใจที่หนึ่งสามารถตั้งค่าผู้สังเกตการณ์ได้ในอะแดปเตอร์ คุณลักษณะนี้ยังมีอยู่ใน RecyclerView แต่คลาส RecyclerView.AdapterDataObserver ใช้สำหรับมัน แต่จุดที่เป็นที่นิยมของ ListView ก็คือมันรองรับการใช้งานอะแดปเตอร์เริ่มต้นสามตัว:
ArrayAdapter CursorAdapter SimpleCursorAdapter โดยที่ RecyclerView อะแดปเตอร์มีฟังก์ชันการทำงานทั้งหมดที่อะแดปเตอร์ ListView มียกเว้นการสนับสนุนในตัวสำหรับเคอร์เซอร์ DB และ ArrayLists ใน RecyclerView.Adapter ในตอนนี้เราต้องทำการปรับใช้เองเพื่อให้ข้อมูลกับอะแดปเตอร์ เช่นเดียวกับ BaseAdapter สำหรับ ListViews แม้ว่าคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งอะแดปเตอร์ RecyclerView โปรดอ้างอิงตัวอย่าง Android RecyclerView
5. แจ้งเตือนการเปลี่ยนแปลงข้อมูล
เมื่อทำงานกับ ListView หากชุดข้อมูลมีการเปลี่ยนแปลงคุณจะต้องเรียกวิธีการ หรือตั้งค่าเมธอด setNotifyOnChange เป็นกรณีจริงที่คุณต้องการเรียกเมธอด informDataSetChanged โดยอัตโนมัติ แต่ในทั้งสองกรณีออกมาหนักมากในรายการ โดยทั่วไปจะรีเฟรชมุมมองของรายการ
แต่ตรงกันข้ามในอะแดปเตอร์ RecyclerView หากรายการเดียวหรือช่วงของรายการมีการเปลี่ยนแปลงมีวิธีการแจ้งให้ทราบการเปลี่ยนแปลงตาม เหล่านั้นคือ NOTEItemChanged และ alertItemRangeChanged ตามลำดับและอีกมากมายที่ชอบ:
และแน่นอนมันมีวิธีการดั้งเดิมในการรีเฟรชรายการทั้งหมดนั่นคือ informDataSetChanged ซึ่งแจ้งให้ทราบว่าชุดข้อมูลทั้งหมดได้เปลี่ยนไปแล้ว
6. รายการตกแต่ง
ในการแสดงตัวแบ่งที่กำหนดเองใน ListView หนึ่งสามารถเพิ่มพารามิเตอร์เหล่านี้ใน ListView XML ได้อย่างง่ายดาย:
XHTML android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" 1 2 android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" ส่วนที่น่าสนใจเกี่ยวกับ Android RecyclerView คือ ณ ตอนนี้มันจะไม่แสดงตัวคั่นระหว่างรายการตามค่าเริ่มต้น ถึงแม้ว่าผู้ชายใน Google จะต้องละทิ้งสิ่งนี้เพื่อปรับแต่ง แต่จงใจ แต่สิ่งนี้จะเพิ่มความพยายามอย่างมากสำหรับนักพัฒนา ถ้าคุณต้องการเพิ่มตัวคั่นระหว่างไอเท็มคุณอาจต้องทำการปรับใช้แบบกำหนดเองโดยใช้คลาส RecyclerView.ItemDecoration
หรือคุณสามารถใช้แฮ็คโดยใช้ไฟล์นี้จากตัวอย่างที่เป็นทางการ: DividerItemDecoration.java
7. OnItemTouchListener
Listviews เคยใช้งานง่าย ๆ สำหรับการตรวจจับการคลิกคือโดยใช้อะแดปเตอร์ ViewViewOnItemClickListener
แต่ในทางกลับกันอินเตอร์เฟส RecyclerViewOnItemTouchListener ใช้เพื่อตรวจจับเหตุการณ์การสัมผัสใน Android RecyclerView มันทำให้การใช้งานมีความซับซ้อนเล็กน้อย แต่มันให้การควบคุมที่ดีขึ้นสำหรับนักพัฒนาในการสกัดกั้นเหตุการณ์การสัมผัส เอกสารอย่างเป็นทางการระบุว่ามันจะมีประโยชน์สำหรับการยั่วยุทางท่าทางเนื่องจากมันสกัดกั้นเหตุการณ์การสัมผัสก่อนที่จะถูกส่งไปยัง RecyclerView
RecyclerView
มันเร็วกว่าและหลากหลายกว่าด้วย API ที่ดีกว่ามาก สิ่งต่าง ๆ เช่นการเคลื่อนไหวการเพิ่มหรือการลบรายการได้ถูกนำไปใช้แล้วRecyclerView
โดยที่คุณไม่ต้องทำอะไรเลย ไม่มีคำถามเกี่ยวกับมันโยนListView
ถังขยะของคุณRecyclerView
ไปที่นี่เพื่อขโมยรายการ