الیاس محمدی
الیاس محمدی
خواندن ۲ دقیقه·۵ سال پیش

چالشی از جنس CustomRecyclerView

Photo by Clark Tibbs on Unsplash
Photo by Clark Tibbs on Unsplash

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

با خودم گفتم جالب میشه اگه خود RecyclerView می‌توست دیتا مورد نظر رو پیدا کنه و لازم نباشه داخل کد جاوا بهش دیتا بدیم.یعنی داخل خود تگ RecyclerView داخل کد xml مسیر دیتا رو بهش میدادیم و لیست پر میشد و دیگه لازم نبود داخل اکتیویتی RecyclerView رو پیدا کنیم و لیست مربوطه رو بهش پاس بدیم.

پس تصمیم گرفتم یک CustomRecyclerView بسازم که مسیر مورد نظر برای تولید دیتا رو بگیره و لیست پر بشه.با این کار خیلی کارم سریع میشد.فقط تگ رو اضافه می‌کردم و آدرس یک متد رو بهش میدادم و هروقت اکتیویتی اجرا میشد لیست پر شده و درست اجرا میشد.پس دست به کار شدم.در ادامه یک نمونه ساده از نحوه پیاده سازی رو برای دوستان می‌نویسم.

قدم اول : ساخت attrs

داخل پوشه values یک فایل با نام attrs.xml ایجاد می‌کنیم و بصورت زیر ویژگی‌های موردنظر روبهش میدیم.این ویژگی‌ها زمانی که از تگ میخواهیم استفاده کنیم،قابل دسترسی هستند و مشابه width یا هر ویژگی دیگه‌ای می‌باشند.

قدم دوم: ساخت Adapter و ViewHolder

در این مرحله یک adapter ساخته و براساس طرح مورد نظر ViewHolder و Layout را طراحی کنید.

قدم سوم: ساخت یک کلاس DataProvider

در این مرحله یک کلاس به اسم DataProvider ساختم که متدی با نام getRows داره که برای ما دیتا و آیتم های مورد نظر برای نمایش در لیست را تولید می‌کند.در تصویر زیر یک نمونه ازین متد که فقط لیستی از رشته ها تولید می‌کند رو می‌تونید ببینید.

قدم چهارم: ساخت کلاس CustomRecyclerView

حالا بخش اصلی کارمون شروع میشه.یک کلاس با نام CustomRecyclerView می‌سازیم که از کلاس RecyclerView ارث بری کرده است.همچنین یک متد به اسم render ساختم که مراحل خواندن ویژگی ها و دیتا را انجام دهد.

ابتدا با گرفتن متن برگشتی از ویژگی dataBinder و جدا کردن آن، نام کلاس و متد مورد نظر برای گرفتن دیتا را بدست آوردم.

در قدم بعدی با استفاده ازReflection کلاس و متد مورد نظر رو پیدا کردم و متد رو صدا زدم و خروجی متد رو داخل یک لیست از جنس رشته ریختم.

در نهایت Adapter را که ساخته بودم با این لیست پر کردم.

قدم پنجم: اضافه کردن تگ CustomRecyclerView

حالا وقتشه که این تگ رو به xml اضافه کنم.پس به layout مورد نظر میرم و این تگ رو به صورت زیر اضافه می‌کنم و در قسمت dataBinder بصورت زیر آدرس کلاس و متد رو میدهم و در قسمت packageName آدرس پکیج که کلاس درون آن قرار دارد:

app:dataBinder="DataProvider/getRows" app:packageName="com.eliasmohammadi.customrecyclerview.Model"

وقتی برنامه رو اجرا کنیم،می‌بینیم که بدون اینکه داخل MainActivity کدی نوشته باشیم،لیست ما پر میشه و نمایش داده میشه.خروجی برنامه را در تصویر زیر رو ببینید:

در پایان دوستان اگر تجربه مشابهی دارید،ممنون میشم با من به اشتراک بذارید.در ضمن لینک سورس پروژه این مقاله رو میتونید از گیت هاب من به آدرس زیر دریافت کنید.ممنون از توجه شما https://github.com/eliasMohammady/CustomRecyclerView_virgool



اندرویدبرنامه نویسیandroidcustomviewrecyclerview
Android Developer With a Passion to Learn
شاید از این پست‌ها خوشتان بیاید