RecyclerView در برنامه نویسی اندروید

RecyclerView در برنامه نویسی اندروید

در این پست قصد معرفی ویجت جدیدی به نام RecyclerView رو دارم . این ویجت جایگزین مناسبی برای ListView خواهد بود. مخصوصا زمانی که لیست ما قراره به طور مرتب توسط دیتایی که از وب یا از کاربر میگیره تغییر کنه. معرفی RecyclerView هم زمان با روی کار آمدن متریال دیزاین در اندروید ۵.۰ به وقوع پیوست.ریسایکل ویو در API 21 اندروید معرفی شد. اما در کتابخانه ساپورت ورژن هفت (android.support.v7.widget.RecyclerView) هم وجود داره تا در نسخه های پایینتر هم پشتیبانی بشه.

مقایسه ویجت RecyclerView با ListView

قبل از این که بخوایم به آموزش کار با RecyclerView بپردازیم ، قصد دارم که یک مقایسه ای بین این دو ویجت داشته باشم ، تا بهتر بتونید راجع به استفاده از بین این دو ویجت تصمیم گیری کنید .

۱ – نیاز به استفاده از ViewHolder برای هر Viewایی که قراره recycle بشه : در بعضی از کاربردهای ListView دیده میشد که برای پیاده سازی آداپتر ، نیازی به تعریف الگو ViewHolder توسط برنامه نویسی نبود . که این کار ، با کاهش بازدهی ListView همراه بود . اما در recyclerView با این که شرایط برای تعریف الگوی ViewHolder کمی پیچیده میشه ؛ ولی این پیچیدگی به عمکرد و بازدهی بهتر می ارزه

۲ – استفاده همزمان از چندین ViewHolder : در ListView شما فقط قادر به تعریف یک ViewHolder بودید . و اگر چنانچه قصد داشتید چندین آیتم (یا همون ViewHolder) رو داخل ListView نمایش بدید ؛ دیگه قدرت این کار رو نداشتید . اما بر خلاف ListView ، ویجت RecyclerView این قدرت مانور رو به شما میده ، که همزمان چندین ViewHolder رو تعریف کنید و اون ها رو به راحتی به RecyclerView تون اضافه کنید .

۳ – اسکرول کردن عمودی و افقی : شما در RecyclerView ، بر خلاف ListView می تونید آیتم هاتون رو به صورت طراحی کنید ، که هم قابلیت اسکرول کردن به صورت افقی و هم به صورت عمودی رو داشته باشند . در صورتی که در ListView شما فقط اجازه داشتید که به صورت عمودی ، آیتم هاتون رو اسکرول کنید .

ساخت و استفاده از RecyclerView در اندروید

به منظور استفاده از RecyclerView لازم است مراحل زیر را دنبال کنید:

۱. افزودن کتابخانه پشتیبان

۲. افزودن RecyclerView در فایل XML لی اوت

۳. ساخت یک لی اوت سطری کاستوم

۴. ساخت Adapter برای تخصیص داده در RecyclerView

۵. ساخت ViewHolder جهت در اختیار قرار دادن یک رفرنس به ویوها برای هر آیتم از داده ها

۶. بایند کردن(bind) Adapter به RecyclerView در Activity

کتابخانه های مورد نیاز

Build.gradle را باز کرده و کتابخانه های مورد نیاز را به آن بیفزایید.

با سینک کردن Gradle همه چیز برای شروع کار آماده می شود.

RecyclerView را به فایل لایوت بیفزایید.

یک لایوت سطری کاستوم بسازید

لی اوت سطری نمایش دهنده لایوت هریک از عناصر نمایش داده شده در RecyclerView می باشد.

یک فایل به نام row_layout.xml ساخته و بخش های زیر را به آن بیفزایید:

ویجت آندروید CardView ما را قادر می سازد تا رنگ پس زمینه، سایه، شعاع گوشه ای، ارتفاع و غیره، کارت ها (آیتم های RecyclerView) را کنترل کنیم.

ویژگیهای مهم مورد استفاده در بالا عبارتند از:

card_view:cardCornerRadius : برای تنظیم شعاع گوشه در طرح بندی ما استفاده می شود.

card_view:cardBackgroundColor : برای تنظیم رنگ پس زمینه استفاده میشود.

 

RecyclerView در این نمونه فهرستی از فیلم ها و توضیحات انتخاب شده به صورت تصادفی خواهد بود. در این مرحله به یک کلاس که یک آیتم از داده های RecyclerView منفرد را به نمایش گذارد نیاز داریم، برای این منظور فایلی به نام Data.java بسازید و موارد زیر را به آن بیفزایید.

آداپتور RecyclerView

RecyclerView.Adapter مشابه سایر Adapter های استفاده شده در یک ListView است، با این تفاوت که دارای یک ViewHolder به منظور ارتقای کارآیی می باشد. یک ListView دارای آداپتورهایی برای منابع گوناگون مانند ArrayAdapter برای آرایه ها و CursorAdapter برای نتایج پایگاه داده می باشد. RecyclerView.Adpter نیازمند یک پیاده سازی کاستوم جهت پشتیبانی از داده های آداپتور می باشد.

آداپتور دارای سه متد به شرح زیر است:

– ()onCreateViewHolder لی اوت سطری را بوجود آورده و ViewHolder را مقداردهی اولیه می کند و هم زمان با مقداردهی ViewHolder به مدیریت متدهای ()findViewById می پردازد و با یافتن ویوها و ریسایکلینگ آنها، از فراخوانی های تکراری جلوگیری به عمل می آورد.

– ()onBindViewHolder از ViewHolder ساخته شده در متد ()onCreateViewHolder استفاده کرده و داده ها را در سطر کنونی از RecyclerView قرار می دهد.

یک فایل به نام Recycler_View_Adapter.java بسازید که دارای کلاس های زیر باشد:

ساخت ViewHolder

RecyclerView از یک ViewHolder برای ذخیره سازی رفرنس ها به ویوهای مرتبط استفاده می کند. این روش از فراخوانی های متد ()findViewById در آداپتور جهت یافتن ویوها جلوگیری می کند.

یک فایل به نام View_Holder.java با کلاس زیر بسازید:

LayoutManager

LayoutManager وظیفه الصاق، اندازه گیری و چیدمان تمامی ویوهای فرزند از RecyclerView به صورت ریل تایم را بر عهده دارد. زمانی که کاربر در ویو اسکرول می کند Layout Manager به تعیین زمان افزودن ویوهای فرزند و جدا شدن و پاک شدن ویوهای فرزند قدیمی می پردازد.

پیاده سازی های پیش فرض زیر در دسترس می باشند:

– LinearLayoutManager – نمایش آیتم ها در یک لیست اسکرولینگ افقی یا عمودی.

– GridLayoutManager – نمایش آیتم های درون یک گرید.

– StaggeredGridLayoutManager – نمایش آیتم های یک گرید staggered.

با اکستند کردن RecyclerView.LayoutManager و یا استفاده از یکی از این پیاده سازی ها و اورراید کردن متدهای موردنیاز قادر به ساخت یک LayoutManager کاستوم می باشید.

حال که کار ساخت RecyclerView به اتمام رسیده گام بعدی افزودن داده به آن می باشد. در متد ()onCreate از کلاس MainActivity یک نمونه از Recycler_View_Adapter بسازید و یک لیست از داده ها و زمینه را به این آداپتور اختصاص دهید. متد ()getApplication محتوای اپلیکیشن را می گیرد.

یک داده نمونه نیز برای ادامه کار نیاز است، برای این مثال یک تابع پیش فرض ساخته شده و در اپلیکیشن واقعی این بخش از یک منبع داده بوجود می آید.

این کار فرآیند راه اندازی یک RecyclerView را تکمیل می کند.

متحرک کردن ریسایکلر ها با ItemAnimator

تمامی مراحل ساخت یک RecyclerView و هر بخش از ساختار آن شرح داده شد، حال بیایید با متحرک سازی آیتم ها بر جذابیت کار بیفزاییم.

RecyclerView.ItemAnimator کلاسی است که به تعریف انیمیشن هایی که بر روی آیتم ها به اجرا در می آیند می پردازد و تغییرات ViewGroup مانند افزودن/حذف/انتخاب را متحرک می کند. DefaultItemAnimator یک انیمیشن مقدماتی است که به صورت پیش فرض توسط RecyclerView در دسترس می باشد.

به منظور شخصی سازی DefaultAnimator یک آیتم انیمیتور را به RecyclerView بیفزایید. کد زیر به سادگی فرآیند افزودن و حذف آیتم ها از RecyclerView را به نمایش گذاشته است.

این بخش را به آخرین بخش از کد در متد ()onCreate بیفزایید:

آموزش ریسایکلر ویو در اندروید

کار با ریسایکل ویو

رویکرد دیگر برای متحرک سازی آیتم های درون RecyclerView استفاده از Android Interpolators می باشد. مبنی بر developer.android.com یک interpolator نرخ تغییر یک انیمیشن را تعیین می کند.در مثال های زیر دو انیمیشن را به نمایش گذاشته شده که با استفاده از interpolator ساخته شده اند. فایل ها را در /anim/ در پوشه سورس پروژه ذخیره کنید.

anticipateovershoot_interpolator.xml

bounce_interpolator.xml

در این مرحله لازم است RecyclerView را باز گردانیم، در داخل آداپتور RecyclerView تابع زیر را بیفزاییذ:

چنانچه نگاه دقیق تری به متد ()LoadAnimation بیندازید، این متد نیازمند یک پارامتر زمینه است که دلیل تغییر سازنده آداپتور در مرحله اول را توجیه می کند و در این مرحله قادر به متحرک کردن RecyclerView می باشیم. درون متد ()onBindViewHolder تابع ()animate را فراخوانی کرده و پارامتر هولدر از کلاس View_Holder را ارسال کنید.

اپلیکیشن را به اجرا در آورده و انیمیشن را تست کنید، در زیر نحوه کار bounce_interpolator نمایش داده شده است.

افزودن انیمیشن به RecyclerView

در مرحله بعدی باید انیمیشن anticipate_overshoot_interpolator را تست کنیم، اما پیش از آن باید لایوت منیجر RecyclerView را به StaggeredGrid در متد اکتیویتی اصلی با دو اسپن ستون و اسکرولینگ عمودی ست کنیم.

آموزش cardview

استفاده از این متد انیمیشن در RecyclerView ساده است، اما استفاده از متدهای انیمیشنی جدید نیازمند تغییر نوع interpolation در مثال بالا می باشد، پارامترها را مطابق با ترجیحات خود ست کنید و با این کار از یک سبک انیمیشن جدید برخوردار خواهید گشت.

اضافه کردن کلیک بر روی آیتم های ریسایکلر ویو

روش های مختلفی برای این کار هست. ما با استفاده از کلاس کمکی این کار را انجام می دهیم.

کلاس RecyclerItemClickListener.java را به پروژه خود اضافه کنید.

حال کدهای زیر را به آخر تابع onCreate اضافه کنید.

 

 

 

 

 

 

 

 

One thought on “RecyclerView در برنامه نویسی اندروید”