Android Recyclerview เทียบกับ ListView กับผู้ดู


148

ฉันเพิ่งเจอ android RecyclerViewที่เปิดตัวพร้อมกับ Android 5.0 และดูเหมือนว่าRecyclerViewเป็นแบบดั้งเดิมที่ห่อหุ้มListViewด้วยรูปแบบ ViewHolder ที่รวมอยู่ในนั้นซึ่งส่งเสริมการนำมาใช้ใหม่ของมุมมองแทนที่จะสร้างเป็นทุกครั้ง

ประโยชน์อื่น ๆ ของการใช้RecyclerViewคืออะไร? หากทั้งคู่มีผลเหมือนกันในแง่ของประสิทธิภาพเหตุใดจึงเลือกใช้ RecyclerView`

แก้ไข

ฉันพบว่าผู้คนได้ถามคำถามที่คล้ายกันและคำตอบไม่ได้ข้อสรุปเพิ่มพวกเขาที่นี่เพื่อเก็บบันทึก

Recyclerview เทียบกับ Listview

เราควรใช้ RecyclerView เพื่อแทนที่ ListView หรือไม่

ทำไม RecyclerView ไม่มี onItemClickListener () และ RecyclerView แตกต่างจาก Listview อย่างไร


4
เพราะRecyclerViewมันเร็วกว่าและหลากหลายกว่าด้วย API ที่ดีกว่ามาก สิ่งต่าง ๆ เช่นการเคลื่อนไหวการเพิ่มหรือการลบรายการได้ถูกนำไปใช้แล้วRecyclerViewโดยที่คุณไม่ต้องทำอะไรเลย ไม่มีคำถามเกี่ยวกับมันโยนListViewถังขยะของคุณRecyclerViewไปที่นี่เพื่อขโมยรายการ
Xaver Kapeller

4
คุณสามารถเชื่อมโยงตัวจัดการโครงร่างกับ RecyclerView ดังนั้นจึงไม่ จำกัด เฉพาะรายการเลื่อนแนวตั้ง นี่เป็นฟังก์ชั่นเพิ่มเติมที่ทรงพลัง
อลัน

@Alan - คุณหมายถึงอะไรโดย "ไม่ จำกัด เฉพาะรายการเลื่อนแนวตั้ง"? คุณกำลังบอกว่ามุมมองรีไซเคิลสามารถทำหน้าที่เป็น "ตัวยึดตำแหน่ง" สำหรับ Gridviews และ ListViews ด้วยหรือไม่
Mushtaq Jameel

@ XaverKapeller - มันจะดีถ้าคุณสามารถแสดงความแตกต่างระหว่างทั้งสองและตอบคำถามแทนที่จะแสดงความคิดเห็นเพื่อที่จะช่วยฉันและคนอื่น ๆ ในอนาคตที่อาจสงสัยในสิ่งเดียวกัน?
Mushtaq Jameel

@Alan - คุณสามารถให้รายละเอียดเล็กน้อยเกี่ยวกับสิ่งที่คุณหมายถึงและตอบคำถามแทนที่จะแสดงความคิดเห็น ขอบคุณที่สละเวลา
Mushtaq Jameel

คำตอบ:


289

ด้วยการถือกำเนิดของ Android Lollipop, RecyclerViewได้ทำอย่างเป็นทางการแล้ว RecyclerView มากขึ้นที่มีประสิทธิภาพและมีความยืดหยุ่นและเพิ่มประสิทธิภาพที่สำคัญกว่า ListView ฉันจะพยายามให้รายละเอียดเชิงลึกกับคุณ

1) รูปแบบ ViewHolder

ใน ListView แนะนำให้ใช้รูปแบบ ViewHolder แต่ไม่เคยถูกบังคับ ในกรณีของ RecyclerView นี่เป็นข้อบังคับโดยใช้คลาสRecyclerView.ViewHolder นี่คือหนึ่งในความแตกต่างที่สำคัญระหว่าง ListView และ RecyclerView

มันทำให้สิ่งต่าง ๆ ซับซ้อนขึ้นเล็กน้อยใน RecyclerView แต่ปัญหามากมายที่เราเผชิญใน ListView นั้นได้รับการแก้ไขอย่างมีประสิทธิภาพ

2) LayoutManager

นี่เป็นอีกการปรับปรุงครั้งใหญ่ที่นำมาสู่ RecyclerView ใน ListView มุมมองชนิดเดียวที่มีอยู่คือแนวตั้ง ListView ไม่มีวิธีอย่างเป็นทางการที่จะใช้ ListView แนวนอน

ตอนนี้ใช้ RecyclerView เราสามารถมี

i) LinearLayoutManager - รองรับรายการทั้งแนวตั้งและแนวนอน

ii) StaggeredLayoutManager - ซึ่งรองรับ Pinterest เช่นรายการที่เซ

iii) GridLayoutManager - ซึ่งรองรับการแสดงกริดตามที่เห็นในแอพคลังภาพ

และสิ่งที่ดีที่สุดคือเราสามารถทำสิ่งเหล่านี้แบบไดนามิกตามที่เราต้องการ

3) Item Animator

ListViews ขาดการสนับสนุนแอนิเมชั่นที่ดี แต่ RecyclerView นำมิติใหม่มาให้ การใช้คลาสRecyclerView.ItemAnimatorการทำให้มุมมองภาพเคลื่อนไหวกลายเป็นเรื่องง่ายและใช้งานง่ายมาก

4) การตกแต่งรายการ

ในกรณีของ ListViews รายการตกแต่งแบบไดนามิกเช่นการเพิ่มเส้นขอบหรือตัวหารนั้นไม่ใช่เรื่องง่าย แต่ในกรณีของ RecyclerView คลาสRecyclerView.ItemDecoratorจะให้การควบคุมขนาดใหญ่แก่นักพัฒนา แต่ทำให้เสียเวลาและซับซ้อนมากขึ้น

5) OnItemTouchListener

การสกัดกั้นการคลิกไอเท็มบน ListView นั้นทำได้ง่ายด้วยอินเตอร์เฟซAdapterViewOnItemClickListener แต่ RecyclerView ให้พลังงานและการควบคุมแก่นักพัฒนามากขึ้นโดยRecyclerViewOnItemTouchListener ( ไม่ได้รับการสนับสนุนอีกต่อไปโปรดดู AndroidX ) แต่มันซับซ้อนเล็กน้อยสำหรับนักพัฒนา

กล่าวง่ายๆว่า RecyclerView สามารถปรับแต่งได้มากกว่า ListView และให้การควบคุมและพลังแก่นักพัฒนา


34
คำตอบที่ดี. ข้อดีเพิ่มเติมอีกสองสามอย่าง: RecyclerView เตรียมมุมมองล่วงหน้าและเบื้องหลังรายการที่มองเห็นซึ่งดีมากถ้าคุณดึงบิตแมปในพื้นหลัง ประสิทธิภาพจะเร็วขึ้นอย่างมากโดยเฉพาะถ้าคุณใช้ RecyclerView.setHasFixedSize ListView แบบเก่านั้นตั้งอยู่บนสมมติฐานว่าไม่มีวิธีการคำนวณล่วงหน้าหรือแคชขนาดของรายการในรายการซึ่งทำให้เกิดภาวะแทรกซ้อนที่บ้าเมื่อเลื่อนและแสดงโครงร่าง ใช้เวลาสักครู่เพื่อทำความคุ้นเคยกับมัน แต่เมื่อคุณทำคุณจะไม่กลับไป
Robin Davies

@RobinDavies จุดที่ดีเยี่ยม ขอขอบคุณที่แจ้ง แต่มันจะไม่สมเหตุสมผลถ้าขนาดของรายการต่างกัน
Aritra Roy

@AritraRoy Recyclerview รองรับเฉพาะ lollipop เท่านั้นหรือ api 14+ (android 4+) หรือยัง? .... ตามที่ฉันอ่าน "after lollipop: ที่ส่วนใหญ่
Animesh Mangla

2
สวัสดี Aritra เมื่อเปรียบเทียบกับ ListView ถ้า ListView ยังใช้รูปแบบ ViewHolder หนึ่งอันใดที่ทำงานได้มีประสิทธิภาพมากขึ้น Recyler จะดูดีขึ้นเมื่อใช้ fps หรือเงื่อนไขอื่นที่คล้ายคลึงกัน? thx ~
RxRead

@RxRead: ดูความคิดเห็นของ Robin เขาแยกความแตกต่าง RecyclerView Vs ListView ด้วยรูปแบบตัวยึดมุมมองบนพื้นฐานของประสิทธิภาพ
Parag Kadam

10

ข้อดีอีกอย่างของการใช้RecycleViewคือแอนิเมชันสามารถทำได้ในโค้ดสองบรรทัด

RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
        recyclerView.setItemAnimator(itemAnimator);

แต่เครื่องมือที่ยังคงดิบเช่นคุณไม่สามารถสร้างส่วนหัวและส่วนท้าย


5
และคุณจะไม่สามารถสร้างหัวกระดาษและท้ายกระดาษในแง่นั้นได้ เป็นเพียงมุมมองประเภทอื่นในอะแดปเตอร์ของคุณ รายการมุมมองห่ออะแดปเตอร์ของคุณHeaderViewListAdapterและเพิ่มการสนับสนุนส่วนหัวในพื้นหลัง ด้วยRecyclerViewคุณเป็นผู้ควบคุม
Eugen Pechanec

RecyclerView ใช้ DefaultItemAnimator เป็นค่าเริ่มต้น แล้วทำไมคุณถึงใช้รหัสนี้?
Athira Reddy

9

ตกลงขุดนิดหน่อยและฉันพบอัญมณีเหล่านี้จากบทความของ Bill Philips ที่RecycleView

RecyclerView สามารถทำได้มากกว่า ListView แต่คลาส RecyclerView นั้นมีความรับผิดชอบน้อยกว่า ListView RecyclerView ไม่ได้:

  • จัดตำแหน่งรายการบนหน้าจอ
  • มุมมองภาพเคลื่อนไหว
  • จัดการกิจกรรมการสัมผัสใด ๆ นอกเหนือจากการเลื่อน

ทุกสิ่งนี้ถูกอบเข้าใน ListView แต่ RecyclerView ใช้คลาสผู้ทำงานร่วมกันเพื่อทำงานเหล่านี้แทน

ViewHolders ที่คุณสร้างนั้นมีความสำคัญยิ่งขึ้นเช่นกัน คลาสย่อย RecyclerView.ViewHolderซึ่งมีเมธอดจำนวนRecyclerView มากใช้ ViewHoldersทราบว่าตำแหน่งใดที่พวกเขาผูกพันอยู่ในขณะนี้รวมถึงรหัสไอดี (ถ้าคุณมี) ในกระบวนการViewHolder ได้รับอัศวิน มันเคยเป็นงานของ ListView ที่จะยึดมั่นในมุมมองรายการทั้งหมดและViewHolderเก็บไว้เพียงเพื่อชิ้นเล็ก ๆ ของมัน

ตอนนี้ ViewHolder จะยังคงอยู่ในViewHolder.itemView ฟิลด์ทั้งหมดซึ่งกำหนดไว้ใน Constructor ของ ViewHolder สำหรับคุณ


4

เพิ่มเติมจากบทความของ Bill Phillip (ไปอ่านเลย!) แต่ฉันคิดว่ามันสำคัญที่จะต้องชี้ประเด็นต่อไปนี้

ใน ListView มีความเคลือบแคลงเกี่ยวกับวิธีจัดการเหตุการณ์การคลิก: ควรมุมมองแต่ละรายการจัดการเหตุการณ์เหล่านั้นหรือ ListView ควรจัดการเหตุการณ์เหล่านั้นผ่าน OnItemClickListener หรือไม่ ใน RecyclerView แม้ว่า ViewHolder จะอยู่ในตำแหน่งที่ชัดเจนเพื่อทำหน้าที่เป็นวัตถุตัวควบคุมระดับแถวที่จัดการรายละเอียดชนิดเหล่านั้น

เราเห็นก่อนหน้านี้ว่า LayoutManager จัดการมุมมองการวางตำแหน่งและ ItemAnimator จัดการการเคลื่อนไหวพวกเขา ViewHolder เป็นส่วนสุดท้าย: รับผิดชอบการจัดการเหตุการณ์ใด ๆ ที่เกิดขึ้นในรายการเฉพาะที่ RecyclerView แสดง


2

ฉันใช้ตัวListViewโหลดภาพ Glide ซึ่งมีหน่วยความจำเพิ่มขึ้น แล้วฉันจะแทนที่ด้วยListView RecyclerViewไม่เพียง แต่ยากในการเขียนโค้ด แต่ยังนำไปสู่การใช้หน่วยความจำมากกว่า aListViewแต่ยังนำไปสู่การใช้หน่วยความจำมากขึ้นกว่า อย่างน้อยในโครงการของฉัน

EditText'sในกิจกรรมอื่นผมใช้รายชื่อที่ซับซ้อนด้วย ในบางคนวิธีการป้อนข้อมูลอาจแตกต่างกันไปนอกจากนี้ยังTextWatcherสามารถนำไปใช้ หากฉันใช้ a ViewHolderฉันจะเปลี่ยน a TextWatcherระหว่างการเลื่อนได้อย่างไร ดังนั้นฉันใช้แบบListViewไม่มีViewHolderและมันใช้งานได้


ฉันใช้ ListView โดยไม่มี ViewHolder และทำงานได้ แนวคิดที่แย่มาก ... ฉันจะแทนที่ TextWatcher ระหว่างเลื่อนได้อย่างไร? ไม่มีความจำเป็นที่จะแทนที่ ... เพียงแค่ TextWacher ควรใส่ข้อมูลลงในภาชนะที่แตกต่างกันหลังจากนำ ... และก็สามารถทำได้ง่ายจริงๆ
Selvin

@Selvin ขอบคุณสำหรับความคิดเห็นของคุณ ตอนนี้ฉันไม่สามารถแก้ไขโครงการ มีหลายรายการTextWatcherบนหน้าจอ บางทีคุณพูดถูก แต่ฉันไม่สามารถตรวจสอบได้
CoolMind

1

นำเซลล์กลับมาใช้ใหม่ในขณะที่เลื่อนขึ้น / ลงซึ่งเป็นไปได้ด้วยการนำ View View มาใช้ใน listView adapter แต่มันก็เป็นอุปกรณ์เสริมในขณะที่ RecycleView เป็นวิธีเริ่มต้นในการเขียนอะแดปเตอร์

แยกรายการออกจากคอนเทนเนอร์ - เพื่อให้คุณสามารถวางรายการได้อย่างง่ายดายในขณะดำเนินการในคอนเทนเนอร์ต่าง ๆ (linearLayout, gridLayout) ด้วยการตั้งค่า LayoutManager

ตัวอย่าง:

mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
  • แอนิเมชั่นการกระทำรายการทั่วไป

  • ItemAnimatorภาพเคลื่อนไหวจะหลุดพ้นและมอบหมายให้

มีมากขึ้นเกี่ยวกับ RecyclerView แต่ฉันคิดว่าประเด็นเหล่านี้เป็นประเด็นหลัก

LayoutManager

i) LinearLayoutManager - รองรับรายการทั้งแนวตั้งและแนวนอน

ii) StaggeredLayoutManager - ซึ่งรองรับ Pinterest เช่นรายการที่เซ

iii) GridLayoutManager - รองรับการแสดงกริดตามที่เห็นในแอพคลังภาพ

และสิ่งที่ดีที่สุดคือเราสามารถทำสิ่งเหล่านี้แบบไดนามิกตามที่เราต้องการ


1

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


1

RecyclerView ถูกสร้างเป็นการปรับปรุง ListView ดังนั้นใช่คุณสามารถสร้างรายการที่แนบมาพร้อมกับตัวควบคุม ListView แต่การใช้ RecyclerView นั้นง่ายกว่าเพราะ:

  1. นำเซลล์กลับมาใช้ใหม่ในขณะที่เลื่อนขึ้น / ลง : สิ่งนี้เป็นไปได้ด้วยการใช้ตัวยึดมุมมองในอะแดปเตอร์ ListView แต่มันเป็นสิ่งที่เป็นตัวเลือกในขณะที่ใน RecycleView มันเป็นวิธีการเริ่มต้น

  2. แยกรายการออกจากคอนเทนเนอร์ : เพื่อให้คุณสามารถวางรายการได้อย่างง่ายดายในขณะดำเนินการในคอนเทนเนอร์ที่แตกต่างกัน (linearLayout, gridLayout) ด้วยการตั้งค่า LayoutManager

mRecyclerView = (RecyclerView) findViewById (R.id.my_recycler_view); mRecyclerView.setLayoutManager (LinearLayoutManager ใหม่ (นี้)); mRecyclerView.setLayoutManager (GridLayoutManager ใหม่ (อันนี้ 2));

  1. แอนิเมชั่นการกระทำรายการทั่วไป : แอนิเมชั่นถูกแยกออกและมอบหมายให้ ItemAnimator มีอีกมากมายเกี่ยวกับ RecyclerView แต่ฉันคิดว่าประเด็นเหล่านี้เป็นประเด็นหลัก

ดังนั้นเพื่อสรุป RecyclerView คือการควบคุมที่ยืดหยุ่นมากขึ้นสำหรับการจัดการ "รายการข้อมูล" ที่เป็นไปตามรูปแบบของการมอบหมายข้อกังวลและปล่อยให้ตัวเองมีเพียงงานเดียว - รายการรีไซเคิล


0

หากคุณใช้ RecycleView อันดับแรกคุณต้องมีประสิทธิภาพมากขึ้นในการตั้งค่า คุณต้องให้เวลามากขึ้นในการตั้งค่ารายการแบบง่าย ๆ เส้นขอบเหตุการณ์การแตะและสิ่งอื่น ๆ แต่ผลิตภัณฑ์สุดท้ายจะสมบูรณ์แบบ

ดังนั้นการตัดสินใจเป็นของคุณ ฉันแนะนำถ้าคุณออกแบบแอพง่าย ๆ เช่นการโหลดสมุดโทรศัพท์ซึ่งการคลิกไอเท็มอย่างง่ายก็เพียงพอแล้วคุณสามารถใช้ listview แต่ถ้าคุณออกแบบเหมือนโซเชียลมีเดียหน้าแรกด้วยการเลื่อนแบบไม่ จำกัด การตกแต่งที่แตกต่างกันหลายอย่างระหว่างไอเท็มควบคุมแต่ละไอเท็มได้มากกว่าการใช้มุมมองรีไซเคิล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.