در این سری از آموزش های برنامه نویسی اندروید قصد داریم تا به بررسی و آموزش ویو RecyclerView بپردازیم. قبل از بکارگیری هر ابزاری باید بدانیم برای رفع کدام مشکل باید آن را بکار بگیریم. برای درک بهتر این موضوع تصمیم دارم تا تاریخچه این ویو را یکبار باهم مرور کنیم.
تاریخچه RecyclerView
قبل از شروع تاریخچه باید بدانیم که از RecyclerView برای نمایش لیست ها استفاده میشود و برای اینکار بطور چشم گیری بهینه سازی شده است. این ویو بعد از طی مسیر زیادی و نتیجه گرفتن از مشکلاتی که در هر مرجله بوجود آمده, ایجاد شده است. دلیل طراحی این ویو, حل مشکلاتی که در مسیر طراحی اپ های بهینه وجود داشت, بود. در ادامه این مراحل را یکبار با هم بازبینی میکنیم.
چرا ScrollView
برای درک بهتر چرایی استفاده از ویوهای که برای نمایش لیست ها استفاده میشوند اجازه بدهید با مهم ترین دلیل آن یعنی کمبود فضای نمایش شروع کنیم. در تلفن های هوشمند همیشه کمبود فضای نمایشی یکی از دلایلی بود که توسعه دهندگان را مجبور میکرد که محتوای خود را بصورت پلکانی زیر یا کنار یکدیگر قرار بدهند. وقتی تعداد این آیتم ها بیشتر میشد قسمت هایی از گرافیک در بخش های خارج از صفحه نمایش قرار میگرفت و از دید کاربر خارج میشد و نیاز بود تا روشی پیاده سازی شود تا کاربر بتواند بخشهای از دسترس خارج شده را ببیند. بر این اساس برای حل این مشکل, ویوی با نام ScrollView بوجود آمد که قدرت پیمایش از سمت بالا به پایین (یا بلعکس) و چپ به راست (یا بلعکس) را به ویو فرزندی که درون آن قرار میگرفت, میداد.
چرا ListView
تا این مرحله توسعه دهندگان توانستند این امکان را داشته باشند که بتوانند در یک Activity تعداد زیادی ویو را به کاربران خود نمایش بدهند. بعد از آن کمی که جلوتر رفتند متوجه شدن در اکثر موارد نیاز دارند تا ویوهای تکراری را در صفحه, نمایش بدهند. (مانند نمایش مخاطبین در دفترچه تلفن) برای انجام اینکار نیاز بود که هر آیتم را یا بصورت دستی در گرافیک اضافه کنند یا در بخش کدنویسی پروژه هر بار یک ویو را با استفاده از Inflate کردن و تنظیم کردن تغییرات به صفحه نمایش اضافه کنند. این روش در همان اول احساس شد که نیازمند کدنویسی های اضافی میباشد و زمان زیادی برای هر مورد این چنینی مصرف میشد. به همین دلیل ویوی با نام ListView ایجاد شد.
با استفاده از ListView توسعه دهندگان میتوانستند با ست کردن یک adapter, تمامی کارهای مدیریت, تنظیم و نمایش اطلاعات را به adapter واگذار کنند و تا جای ممکن کدنویسی های اضافه انجام نمیشد و به این شکل میشد به تعداد نامحدودی ویوهای تکراری پشت سرهم را در صفحه به کاربران نمایش داد.
مشکل استفاده از ListView
تا این مرحله پیشرفتیم که با استفاده از adapterهایی که ListView برای ما در دسترس قرار میداد میتوانستیم لیستی از ویوهای تکراری را به کاربران براحتی نمایش بدهیم. اما باز هم کم کم مشکلی جدید تحت عنوان Memory Leak یا کمبود حافظه خودش را بیشتر نشان میداد. در این خطا اپ با پیام Force close برمیخورد و از دسترس میشود. دلیل این مشکل این است که برای نمایش هر آیتم از این لیست نیاز بود که ویوی برای آن بوجود آید تا بتوان آن را نمایش داد.
هر ویو برای نمایش باید در حافظه تلفن قرار بگیرید. بدیهی است اگر تعداد این ویوها بیشتر شود در نتیجه حافظه بیشتری نیاز است تا بتوان همه این ویوها را در خود نگه دارد. زمانی که حافظه بیش از حد پر شود تلفن دیگر نمیتواند برنامه های ضروری خود را بخوبی اجرا کند و مجبور است تا حافظه را خالی کند. در اولین قدم برنامه های غیرضروری که حافظه زیادی را اشغال کردن را حتی اگر در حال اجرا باشند از دسترس خارج میکند تا بتواند حافظه را تا حد نرمالی که بتواند سیستم را با استفاده از آن سرپا نگهدارد, خالی کند.
چرا RecyclerView
برای حل مشکل کمبود حافظه, RecyclerView را طراح کردند که از جنبه های مختلفی شبیه به ListView بود اما با امکاناتی فراتر از آن. در RecyclerView به اندازه ای که صفحه نمایش کاربر جا داشت, ویو inflate میشود و اطلاعات روی آن ویو هم پوشانی میشود. بعد از اسکرول کردن, ویوی که قبلا در صفحه نمایش بود و از دید کاربر خارج میشود, مجدد بازیافت میشود و اطلاعات جدید روی آن تنظیم میشوند. یعنی اگر ما 1000 آیتم درون یک لیست داشته باشیم فقط 5 ویو ایجاد میشود و برای تمامی آیتم ها از آن ویوها استفاده میشود. (البته این عدد بستگی به ارتفاع ویو و صفحه نمایش و نوع چینیش آن بستگی دارد و اینجا این عدد فقط یک مثال است)
با استفاده از این روش, مدیریت کاملی در استفاده از حافظه از تلفن انجام میشود. نکته دیگری که نباید جا بیفتد این است که شما با استفاده از RecyclerView میتوانید بیش از یک نوع ویو بکار بگیرید و مانند ListView اجبار به استفاده از یک نوع ویو را ندارید.
چرا این آموزش
در بیشتر آموزش های موجود در سطح وب که برای RecyclerView وجود دارد, موارد مبتدی را آموزش داده اند. موارد اصلی و پیشرفته آموزشی برای این ویو از قلم افتاده است. در این آموزش که برای شما آماده کرده ایم, پا را از این موارد ساده و پیش پا افتاده فراتر گذاشته ایم. در این آموزش از سطح مبتدی شروع میکنیم و تا سطح حرفه ای پیش میرویم.
ویژگی های این آموزش
- آنالیز کامل نحوه کار کرد RecyclerView
- پیاده سازیAdapter در RecyclerView با اشکال مختلف
- بررسی ViewHolder
- طراحی ViewHolder برای Adapter
- بررسی بحث کپسوله سازی برای RecyclerView
- بررسی کامل LayoutManager ها
- پیاده سازی چند نوع ویو در یک Adapter برای RecyclerView
- پیاده سازی Listener کلیک برای هر آیتم در Adapter
- بررسی متد های Notify برای اضافه, جابجای یا حذف کردن یک آیتم از Adapter بدون دوباره ست کردن آن