4.67/5 (3)

سلام خدمت شما همراهان سایت SmartDevelopers.ir .

حذف آیتم های RecyclerView با swipe کردن آنها

فکر میکنم تا حالا بیشتر شما برنامه هایی رو دیدین که با کشیدن یا درگ کردن (swipe کردن ) آیتم های لیست موجود در برنامه اون آیتم حذف میشه یا کار دیگه ای انجام میشه . برای مثال لیست تماس ها وقتی آیتم ، ریکورد یا مخاطبی رو به سمت راست میکشید با مخاطب تماس میگیره و وقتی به سمت چپ میکشید اونو حذف میکنه یا اینکه به قسمت ارسال اس ام اس میره . تو این آموزش قصد دارم حذف کردن آیتم های RecyclerView با کشیدن به سمت چپ یا راست رو به شما آموزش بدم .

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

ایجاد Layout ها:

یک پروژه جدید درست کنید و در فایل activity_main.xml یک RecyclerView قرار بدید :

یک فایل جدید به اسم recycler_row در پوشه layout بسازید . این فایل قراره لایوت هرکدوم از آیتم های لیست ما بشه . کد های زیر رو درون فایل وارد کنید:

اینجا از FrameLayout استفاده کردم چون برای اینکه بتونیم اشیا یا ویجت هارو روی همدیگه قرار بدیم، این لایوت بهتر از بقیه لایوت ها عمل میکنه (البته به گفته خود گوگلی ها ) ولی در عمل با RelativeLayout هم میشه همچین کاری کرد ! توی این قسمت دوتا RelativeLayout  داریم که یکیش با آیدی view_background و دومیش با آیدی view_foreground مشخص شدند . view_foreground همون لایوت اصلیه که قراره به کاربر نشون داده بشه وview_background که به رنگ قرمز هست قراره زیر view_foreground قرار بگیره که وقتی کاربر آیتم رو به سمت چپ یا راست کشید لایه زیریش یعنی view_background  دیده میشه و نوشته DELETE رو نشون میده .

تعریف Adapter برای RecyclerView :

خب تا اینجای کار لایوت های RecyclerView خودمون رو درست کردیم حالا بریم سراغ Adapter برای RecyclerView . یک کلاس به اسم MyAdapter.java بسازید و کد های زیر رو درون فایل وارد کنید :

اگه قبلا با RecyclerView کارکرده باشید فکر نمیکنم تا اینجای کار با کد های بالا مشکلی داشته باشید . فقط در کلاس بالا یک متد با نام remove قرار دادم که قراره برای حذف آیتم استفاده بشه .

حالا به قسمت اصلی میرسیم که کلاس ItemTouchHelper هستش . با استفاده از این کلاس میتونیم swipe کردن (کشیدن) یا عمل (drag and drop ) رو به RecyclerView اضافه کنید .

کلاس دیگری که خاصیت های onSwipe ، onMove و … رو در اختیار ما میذاره کلاس ItemTouchHelper.SimpleCallback هستش . برای استفاده از این کلاس کلاسی به اسم RecyclerItemTouchHelper.java میسازیم و این کلاس از ItemTouchHelper.SimpleCallback ارث بری خواهد کرد .

کد های زیر مربوط به کلاس RecyclerItemTouchHelper.java ست :

شاید براتون سوال باشه که اینترفیس RecyclerItemTouchHelperListener برای چیه ؟ خب ما برای اینکه به کلاس ItemTouchHelper.SimpleCallback بفهمونیم که قراره چه کاری انجام بشه وقتی که آیتم swipe شد به این اینترفیس نیاز داریم تا متدش رو در متد onSwiped مربوط به RecyclerItemTouchHelper فراخوانی کنیم که کاری که قراره انجام بشه رو اجرا کنه (در این آموزش حذف کردن آیتم) . در واقع برای اینکه ما بتونیم یک متد رو به عنوان آرگومان به یک متد دیگه ارسال کنیم باید از اینترفیس استفاده کنیم . کمی جلوتر با نحوه این چیزی که گفتم آشنا میشید .

بخش پایانی :

و در آخر کد های مربوط به MainActivity.java باقی موند که به صورت زیر نوشته میشن :

برای اینکه ItemTouchHelper.SimpleCallback رو به RecyclerView معرفی کنیم اول از این کلاس یک شی تولید میکنیم(خط اول زیر ستاره ها ) و با استفاده از متد attachToRecyclerView  مربوط به ItemTouchHelper ، شی simpleCallback ی رو که تولید کردیم رو به RecyclerView نسبت میدیم (خط دوم زیر ستاره ها ).

اگر میخواین با کشیدن به هر دو سمت عمل حذف انجام بشه simpleCallback رو به صورت زیر تعریف کنید :

دقت داشته باشید که MainActivity ما از کلاس RecyclerItemTouchHelper.RecyclerItemTouchHelperListener ایمپلیمنت شده . و در متد onSwiped هم عمل حذف آیتم swipe شده رو انجام میدیم و به متد simpleCallback  ارسال میکنیم .

امیدوارم از این آموزش لذت برده باشید  🙂

به این مطلب چه امتیازی میدهید ؟

اشتراک
باخبر شدن از
guest
0 Comments
Inline Feedbacks
View all comments