دوره های آموزشی
خانه / آموزش اندروید / آموزش کتابخانه Paging در اندروید

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

بسیاری از برنامه ها مجموعه بزرگی از داده ها را به کاربران نمایش می دهند . برای مثال برنامه آمازون را در نظر بگیرید این برنامه لیستی از محصولات را نشان می دهد. محصولات زیادی هم دارد اما تمام محصولات را یکباره بارگیری نمی کند ,برخی از محصولات را  نشان می دهد و به محض رسیدن به آخرین مورد از لیست , محصولات بیشتری را بارگیری می کند و به ما نشان می دهد .اینکار صفحه بندی یا پیمایش (Paging)  نامیده می شود.

چرا از Paging استفاده کنیم؟

  • فرض کنید بیش از 1000 آیتم برای لیست تان دارید که از یک سرور پشتیبان ,می گیرید. کار اشتباهی است که همه آیتم ها را یکباره خوانده و نمایش دهیم .

معایب عدم استفاده از صفحه بندی (Paging) :

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

مزایای استفاده از پیمایش:

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

کتابخانه paging

کتابخانه paging اندروید یک جز  از کامپوننت jetpack اندروید هست .به یاد داشته باشید که بطور پیش فرض در دسترس نیست و باید این کتابخانه را به برنامه اضافه کنیم. اینکار به ما کمک می کند که داده هارا به تدریج و به زیبایی در RecyclerView  بارگیری کنیم.

Android Jetpack مجموعه ای از کتابخانه ها، ابزار ها و راهنمایی های معماری است که به شما کمک می کند تا سریع و آسان به ساخت برنامه های کاربردی برای اندروید بپردازید. Android Jetpack زیر ساخت ها ی کد را فراهم می کند، بنابراین شما می توانید بر روی آنچه که در برنامه شما مورد نیاز است ، تمرکز کنید.

پیش نیازها

  • استفاده از Retrofit در اندروید:از کتابخانه Retrofit برای آوردن داده ها از API backend استفاده خواهیم کرد.
  • RecyclerView:بعد از آوردن آیتم ها از سرور آنها را در یک RecyclerView بارگذاری خواهیم کرد.
  • Android ViewModel: یک جزء دیگر از Android Jetpack میباشد و به ما کمک می کند اطلاعات مربوط  به رابط کاربر(UI) را به روش کارآمدتر نمایش دهیم .

Backend API

مهمترین قسمت Backend API هست . اگر چه شما میتوانید داده ها را از پایگاه داده SQLITE با استفاده از کتابخانه Paging بارگذاری کنید اما اغلب , برنامه نیاز به استخراج داده از Bakend API دارد . شما میتوانید با یادگیری یکسری آموزشها یک API را با استفاده از PHP و MYSQL بسازید .

در این آموزش API را خودمان نخواهیم ساخت و از یک API واقعی از Stackoverflow استفاده کنیم.در زیر لینک API هست  :

در نشانی اینترنتی API بالا پارامترهای زیر را داریم:

  • Page: شماره صفحه ای که میخواهیم بیاریم.
  • Pagesize:تعداد کل آیتم هایی که در صفحه میخواهیم.
  • Site:سایتی که میخواهیم داده ها را از آن  بیاوریم.

نشانی اینترنتی بالا پاسخ زیر را خواهد داد:

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

داده ها از Stackoverflow می آیند و این سایت یک مجموعه داده بسیار بزرگی دارد بنابراین ممکنه تعداد نامحدود صفحات داشته باشیم. حال وظیفه ما این است که صفحه 1 را برداریم و به محض رسیدن کاربر به انتهای فهرست ,صفحه بعدی را بارگذاری کنیم و برای اینکار از کتابخانه paging اندروید استفاده می کنیم.

حالا بیایید وارد کد واقعی شویم.

ایجاد یک پروژه جدید:

  • یک پروژه جدید با عنوان Paging Library Tutorial ایجاد میکنیم.

اضافه کردن وابستگی ها (Dependencies)

  • به فایل build.gradle بروید و وابستگی های زیر را اضافه کنید:
  • بعد از اضافه کردن وابستگی های مورد نیاز پروژه خود را sync (همگام) کنید.

ما وابستگیهای زیر را اضافه کردیم:

  • Retrofit and Gson: برای تجزیه json از URL ( نشانی اینترنتی)
  • ViewModel : کامپوننت اندروید برای ذخیره داده ها
  • Paging:کتابخانه صفحه بندی (پیمایش)
  • RecyclerView and CardView:برای ساختن فهرست
  • Glide:برای بارگذاری تصویر از URL

ایجاد کلاس مدل

ما به این کلاس نیاز داریم تا پاسخ Json را بطور خودکار تجزیه کنیم. در کل به کلاسهای زیادی  هم نیاز داریم تا پاسخ  را بطور خودکار به کلاس جاوا مربوطه متصل کنیم

  • یک فایل به نام StackApiResponse.java ایجاد کنید و کد زیر را بنویسید.
  • کد بالا بسیار ساده است . و در حد امکان کوتاه نوشته شده است . نام متغیرها با کلیدهای Json مطابقت دارد بنابراین Gson داده ها را بر اساس آن نمایش خواهد داد .
  • فایل بالا فقط یک کلاس عمومی (public) دارد .(در واقع ما میتوانیم فقط یک کلاس عمومی در یک فایل داشته باشیم)

کلاس به نام StackApiResponse.java شامل Json زیر است:

  • در کلاس فوق ما در حال تطبیق دادن داده های  Json بالا هستیم به همین دلیل است که فقط ۴ ویژگی در StackApiResponse.java داریم.
  • اولین مورد در داخل StackApiResponse.java آیتم (items) هست که شامل یک آرایه از آیتم ها می باشد.به همین دلیل است که یک < List<Item داریم.

سپس has_more از نوع boolean  هست و quota_max و quota_remaining  از نوع int هستند.

  • در حال حاضر داخل  Item , ما Json زیر را داریم:

  • درون items ما یک شی ء دیگر به نام Owner  داریم.به همین دلیل است که یک کلاس دیگر به نام owner ایجاد کرده ایم و یک شیء از  نوع owner را داخل کلاس Item تعریف کرده ایم.امیدوارم که فهمیده باشید که چطور کلاس مدل را برای Json مشخص تعریف کنید.

ایجاد کلاس Retrofit

هر بار که میخواهیم داده ها را از یک صفحه جدید دریافت کنیم به شیء Retrofit نیاز داریم. پس ایجاد یک نمونه از Retrofit ایده خوبی هست .

یک کلاس جدید به نام RetrofitClient ایجاد می کنیم.

کد بالا بسیار ساده است اما اگر در درکش مشکل دارید از ابتدا آموزش را دنبال کنید.

ایجاد API

  • حالا ما رابط فراخوان API را ایجاد میکنیم.
  • یک رابط به نام Api ایجاد کرده و کد زیر را می نویسیم.
ایجاد RecyclerView

  • همانطور که قبلا گفته بودیم این لیست را در RecyclerView نمایش خواهیم داد . به  activity_main.xml بروید و RecyclerView را در اینجا تعریف کنید.
  • حالا برای RecyclerView یک فایل لایوت به نام recyclerview_users ایجاد کنید و کد  xml زیر را بنویسید.
ایجاد  PagedListAdapter 

برای خواندن صفحه ی داده ها از RecyclerView.Adapter استفاده نخواهیم کرد  و به جای آن از  pageListAdapter استفاده خواهیم کرد. این کلاسی هست که کارهایی مثل شمارش آیتم , صفحه فراخوانی (callback) و غیره را انجام میدهد . و نکته این است که به عنوان رابط برای RecyclerView ما خواهد بود.

  • یک کلاس به نام ItemAdapter ایجاد کنید و کد زیر را بنویسید.
آداپتر تقریبا شبیه<> RecyclerView.Adapter است.تنها تغییر اینجا این است که ما  پیاده سازی Diff_CallBack  را داریم که برایsuper()  استفاده میکنیم هستیم . این فراخوانی برای متمایز کردن دو مورد در یک لیست استفاده میشود.

  • برای <> pagedListAdapter ما Item   و  viewholder  را تعریف می کنیم . Item موردی هست که شما میخواهید نمایش داده شود و ما یک کلاس به این نام داریم که حاوی اطلاعاتی است که برای نمایش نیاز داریم.

ایجاد منبع داه Item

منبع داده item هایمان از جایی است که داده های واقعی را قرار دارد خوانده می شود و همانطور که میدانید که ما از StackOverFlow  Api استفاده میکنیم.

برای ایجاد منبع داده گزینه های زیادی مانند :ItemKeyedDataSource, PageKeyedDataSource, PositionalDataSource    داریم.

برای مثال ما قصد داریم ازPageKeyedDataSource استفاده کنیم . و در Api باید برای آوردن صفحه ای که میخواهیم  شماره صفحه را بفرستیم . پس در اینجا شماره صفحه می شود کلید صفحه ی ما .

  • یک کلاس با نام ItemDataSource ایجاد کنید و کد زیر را بنویسید.
ممکن است کد بالا مشکل به نظر برسد اما مهمترین بخش پروژه ما هست . پس با هم مرور میکنیم.

  • کلاس بالا   از کلاس <  PageKeyedDataSource<Integer, Item ارث بری دارد . Integer در اینجا کلید صفحه را تعریف می کند که در اینجا  ما عددی صحیح استفاده می کنیم . هر بار که ما یک صفحه جدید از API میخواهیم باید شماره صفحه ای که میخواهیم  که یک عدد صحیح است را بفرستیم . Item موردی است که ما از API بدست خواهیم آورد .از قبل یک کلاس به نام Item داریم.
  • سپس اندازه یک صفحه را تعریف کردیم که 50 هست , شماره صفحه اول که 1 هست و sitename جایی هست که میخواهیم اطلاعات را بدست آوریم اگر میخواهید این مقادیر را تغییر دهید.
  • ما سه متد را overridden کردیم :

() loadInitials: این متد داده های اولیه را بار خواهد کرد.

() loadBefore:  این متد صفحه قبلی را بار خواهد کرد.

() loadAfter:  این متد صفحه بعد  را بار خواهد کرد.

ایجاد Item Data Source Factory

ما قصد داریم از <> MutableLiveData برای ذخیره  PageKeyedDataSource مان استفاده کنیم و برای اینکار به  DataSource.Factory نیاز داریم.

ایجاد  ViewModel

  • یک کلاس با نام  ItemViewModel ایجاد کنید و کد زیر را بنویسید:

حالا پروژه خود را بازسازی (rebuild) کنید

نمایش Paged List

  • در نهایت به MainActivity.java بروید و کد زیر را بنویسید:
حالا پروژه خود را اجرا کنید.

توجه: اگر هیچ آیتمی را نمی بینید مطمین شوید که  نشانی اینترنتی API به درستی کار می کند( با باز کردن نشانی اینترنتی در مرورگرتان ).گاهی اوقات  stackoverflow در خواستهای پیوسته به URLs را مسدود می کند.

دانلود پروژه کتابخانه Paging در اندروید

 

 

درباره ی دولت آبادی

همچنین ببینید

آموزش اندروید

کار با RecyclerView در اندروید

RecyclerView نسخه ی پیشرفته ی ListView می باشد که عملکرد بهتری داشته و مزایای بیشتری ...

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *