مقایسه RecyclerView و ListView

سلام دوستان همیشگی در ای مقاله به مقایسه RecyclerView و ListView می پردازیم همانطور که قبلا RecyclerView و ListView معرفی کردیم از این شئی ها می توان به منظور نمایش لیستی از اجزا استفاده کرد در ایم مقاله RecyclerView و ListView را بررسی می کنیم و مزایا و معایب هرکدام را بیان می کنیم با ما همراه باشید.
 
اگر تابه حال به این شئی ها در برنامه نویسی اندروید آشنا نشده اید از لینک های زیر استفاده کنید.

RecyclerView چیست ؟

ListView چیست ؟

یک داستان کوتاه درباره RecyclerView و ListView

ListView ویجت قدیمی خوبی بود برای ایجاد لیستی از اجزا که قابلیت Scroll را داشتند و از api 1 قابل استفاده بود ولی مشکل بزرگش پشتیبانی نکردن از اسکرول به صورت Horizontal بود شاید کابوس برنامه نویس ها در زمان خودش بود و از نظر طراحی رابط کاربری اصلا smooth نبود. RecyclerView همراه با Android Lollipop عرضه شد کلی از باگ هایی که در  ListView وجود داشت و باعث می شود برنامه نویس ها را کلافه کنه در RecyclerView حل شد تمامی بخش ها در RecyclerView استاندارد سازی شد به گونه ای با استفاده از RecyclerView هیجوقت خطای Memory Leak  در لیست اتفاق نخواهد افتاد.
5 دلیل وجود دارد که از RecyclerView به جای ListView استفاده کنید که در ادامه آنها را باهم بررسی می کنیم.

ViewHolder

ViewHolder pattern یکی از ویژگی های RecyclerView است یک از ویژگی های ViewHolder pattern ایجاد لیست smooth است و دلیل دوم عمل findviewbyid تنها چندبار اتفاق می افتد نه به تعداد آیتم های لیست ما.

LayoutManager

یک دیگر از ویژگی های فوق العاده RecycelrView وجود LayoutManager است که باعث می شود به هرشکلی که بخواهید آیتم های خود را نمایش دهید به صورت افقی عمودی بقل هم به شکل دوتایی سه تایی و…

ItemDecoration

ویژگی فوق العاده جالبی که در RecyclerView به شکل کد وجود دارد پشتیبانی از Divider یا جداکننده سفارشی است (به صورت پیشفرض جدا کننده در RecyclerView وجود ندارد) ولی با استفاده از  Extend از کلاس ItemDecoration به راحتی می توان جداکننده سفارشی طراحی کرد. شاید بگید چرا همچین کاری باید کرد می توان در layout مربوط به هر آیتم یک جداکننده به صورت عکس یا کد xml قرار داد تفاوت کد اصلی با عکس در این است که آیتم آخر نیاز به Divider ندارد در صورتی که با کد این کار انجام شود در آخرین View دیگر Divider وجود نخواهد داشت (هر چیزی اصولیش خوبه ☺)

ItemAnimator

یک دیگر از فوق العاده ترین ویژگی های RecyclerView پشتیانی از ItemAnimator است همانطور که از نام آن پیداست برای ایجاد انیمیشن بروی آیتم های مختلفی است اگر خواسته باشید بروی ListView انیمیشن قرار دهید خواهید دید چقدر عذاب آورد خواهد بود ولی به راحتی در اینجا می توان انیمیشن را به ItemAnimator داد و به ازای هر آیتم انیمیشن را مشاهده کرد.

Notifying adapter

شاید تنها ویژگی که RecyclerView را از ListView متمایز کند استفاده از notify های مختلف باشد در ListView فقط یک Event به نام notifyDataSetChanged وجود داشت و این زمانی اتفاق می افتاد که داده تغییر کرده باشد مثلا یک آیتم به لیست اضافه شده باشد ولی در RecyclerView علاوه بر notifyDataSetChanged دو ویژگی notifyItemInserted(), notifyItemRemoved()  وجود دارد که در زمانی که بخواهیم انیمیشن را نمایش دهیم به کار می آید به طور متوجه می شویم داده حذف شده است انیمیشن x لود شود متوجه می شویم داده اضافه شده است انیمیشن x لود شود.
کاربران فعلی دنبال لیستی میگردند که کمی واکنش گرا باشد صادقانه بخواهیم بگویم ListView اصلا  برای طراحی متریال دیزاین طراحی نشده است ولی در عوض با RecyclerView هرکاری که بخواهید می توان کرد شاید بگید پیاده سازی و استفاده از RecyclerView کمی سخت باشد ولی اگر کمی دقت کنید متوجه می شوید اگر RecyclerView خطایی داشته حل شده و اگر پیاده سازی آن سخت است (هرچند که نیست) به خاطر وجود بخش های مختلف آن است.
مزایای RecyclerView

  • استفاده از الگوی ViewHolder
  • smooth تر نسبت به ListView
  • طراحی متریال
  • سرعت بالاتر
  • استفاده بهینه از Memory
  • عدم خطای Memory Leak
  • پشتیانی از OnItemTouchListener که در ListView وجود ندارد.
  • ایجاد Event برای اسکرول
  • قابل سفارشی سازی
  • و…

معایب RecyclerView

  • پیچیدگی پیاده سازی
  • هیچی

مزایای ListView

  • سادگی پیاده سازی
  • پشتبانی از الگوی ViewHolder (اما هیچوقت کسی برای ListView پیاده سازی نکرده است چون RecyclerView به صورت پیشفرض از آن پشتیبانی می کند)
  • قابل سفارشی سازی

معایب ListView

  • استفاده زیاد از Memory
  • ایجاد خطای Memory Leak در view های پیچیده
  • عدم پشتیانی از کلیک های مختلف مثل OnTouch
  • عدم پیاده سازی انیمیشن برای حالت های مختلف مثل حذف و درج

 
 
این مقاله هم به پایان رسید.
موفق و پیروز باشید.

مطالعه بیشتر