آموزش فرگمنت در اندروید

فرگمنت در اندروید قسمتی از اکتیویتی هست که امکان طراحی ماژولار اکتیویتی را به ما می‌دهد، بنابراین به اکتیویتی خود وابسته است و  توانایی اجرا به صورت مستقل را ندارد.

تعامل با فرگمنت میتونه از طریق متدFragmentManagerانجام بشه، که توی اکتیویتی با Activity.FragmentManager
و توی فرگمنت با Fragment.FragmentManager میتونیم به کار ببریم.
بالاترگفتم که فرگمنت در اندرو به اکتیویتی خود وابسته است، اینجا باید یادآوری کنم که یک فرگمنت چرخه‌ی حیات خود را دارد که به چرخه‌ی حیات اکتیویتی خود وابسته است.

پس ویژگی‌های یک فرگمنت را در زیر می‌شماریم:

  • فرگمنت در چرخه‌ی حیات callback( Life cycle callback) layoutخودش را دارد.
  • وقتی یک اکتیویتی در حال اجراست، میتوانید یک فرگمنت را اضافه یا حذف کنید.
  • در یک اکتیویتی می‌توانید چند فرگمنت داشته باشید تا یک UI با چند پنجره‌ داشته باشید.
  • یک فرگمنت را می‌توانید در چند اکتیویتی به‌کاربرید.
  • چرخه‌ی حیات یک فرگمنت یه چرخه‌ی حیات اکتیویتی وابسته است، بدین معنا که وقتی اکتیویتی استاپ شود، فرگمنت نمی‌تواند استارت شود، و وقتی اکتیویتی destroyشود، فرگمنت نیز destroy میشود.
  • فرگمنت می‌تواند UI نداشته باشد.

فرگمنت‌ها در اندروید Honeycomb به اندروید اضافه شدند. پس برای نسخه‌های قدیمی‌تر اندروید نمی‌توانید از فرگمنت استفاده کنید.

برای ایجاد یک فرگمنت، کلاسی ایجاد می‌کنیم که از کلاس Fragment  ارث‌بری داشته باشد، و از طریق تگ <fragment> در یک اکتیویتی می‌توانید یک فرگمنت را در اکتیویتی خود داشته باشید.

نکته درباره فرگمنت

برای سایز تبلت، یک اکتیویتی می‌تواند شامل دو فرگمنت باشد، ولی درسایزهای کوچک دو فرگمنت در یک صفحه قابل مشاهده نیست.

شکل زیر چرخه‌ی حیات فرگمنت را نشان می‌دهد. حتما شکل را به خوبی تحلیل و بررسی کنید، چرا که اپلیکیشن‌هایی که امروزه نوشته میشوند معمولا براساس فرگمنت( fragment base) هستند. و حتما باید مطابق با چرخه‌ی حیات فرگمنت کدهای خود را در جای مناسب قرار دهید.

چرخه حیات فرگمنت

در زیر به توضیح آن می‌پردازم:

()onAttach وقتی که فرگمنت با اکتیویتی ارتباط داشته باشد، این متد صدا زده می‌شود
()onCreate برای شناسایی اولیه‌ی فرگمنت صدا زده می‌شود

() onCreateViewنما(view)های مرتبط با فرگمنت را ایجاد می‌کند و باز می‌گرداند
()onActivityCreated کامل شدن اکتیویتی را به فرگمنت خبر می‌دهد، پس از () onCreateViewصدا زده میشود.

() onStartفرگمنت را برای کاربر قابل مشاهده می‌کند( بر اساس استارت اکتیویتی)

()onResume قابلیت تعامل بین کاربر و فرگمنت را ایجاد می‌کند( براساس اکتیویتی)

وقتی فرگمنت دیگر استفاده نشد، سری برعکس میشود پس متدهای زیر را داریم:

()onPause جاییست که فرگمنت دیگر با کاربر تعاملی ندارد. اینجا دقیقا جاییست که باید عملیاتی که قبل از بسته شدن فرگمنت می‌خواهید انجام پذیرد را باید بنویسید.( مثلا اگر قرار است قبل از بسته شدن فرگمنت مطلبی را ذخیره کنید)

()onStop با این متد فرگمنت بسته می‌شود و زمانی اتفاق می‌افتد که فرگمنت دیگر برای کاربر قابل مشاهده نیست.

() onDestroyViewبه فرگمنت این امکان را می‌دهد که منابعی که به viewها تخصیص داده پاک کند.

() onDestroyپاکسازی(cleanup) نهایی فرگمنت با این متد صورت می‌پذیرد، ولی تضمینی نداریم که این تابع صدا زده شود.

()onDetach دقیقا قبل از اینکه اتصال فرگمنت با اکتیویتی قطع شود صدا زده می‌شود.

انواع فرگمنت ها در اندروید

Single frame fragments که برای دستگاه‌های کوچک مثل موبایل‌ها قابل استفاده است.
List fragments  فرگمنت‌هایی که یک لیستی از داده‌دارند.
Fragments transaction  با fragment transaction به کار برده می‌شوند. به این روش می‌توان ازیک فرگمنت به فرگمنت بعدی برویم.

ایجاد Fragment در اندروید

برای ایجاد فرگمنت چندروش داریم، یکی با استفاده از خود برنامه‌ی اندروید استادیو، دومی به صورت دستی.

روش اول: با استفاده از برنامه‌ی اندروید استودیو

 


در شکل زیر میبینیم که یک فرگمنت خالی(fragment(blank)) ایجاد می‌کنیم. و تیک‌های Include fragment factory method  و Include interface callback را برمی‌داریم.( بعدا این توابع را در صورت لزوم می‌توانیم به صورت دستی اضافه کنیم).

اگر فرگمنت را به روش بالا اضافه کنید، خواهید دید که fragment layoutبه شکل پیش‌فرض افزوده می‌شود.

روش دوم: افزودن فرگمنت به صورت دستی


در این روش ابتدا یک کلاس ایجاد می‌کنیم، همانطور که بالاتر توضیح دادم کلاس فرگمنت باید از Fragment ارث‌بری کند، پس از ایجاد کلاس می‌نویسیم

به طورپیش‌فرض یک کانستراکتور خالی برای فرگمنت می‌نویسیم.

 

در پکیج res > layout برای آن layoutایجاد می‌کنیم. و شمای فرگمنت را در آن ایجادمی‌کنیم. به خاطر داشته باشید که متد onCreateView() را برای اتصال کد جاوا به layout صدا کنیم.

چگونگی قراردادن فرگمنت در اکتیویتی

برای اینکه بتوانیم دریک اکتیویتی یک فرگمنت داشته باشیم می‌توانیم کد زیر را در activity layout قرار دهیم.

به نام کلاس در فرگمنت دقت کنید.
همچنین می‌توانیم کد زیر را در Activity_layout قرار دهیم.

 

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

برای نمایش دو فرگمنت در یک اکتیویتی به صورت همزمان activity_layout را به شکل زیر می‌نویسیم

چه طوراز اکتیویتی فرگمنت را نمایش دهیم؟

 

()replace فرگمنت مورد نظر را جایگزین layoutی میکند که در اکتیویتی برای فرگمنت درنظر گرفتیم.

.() setCustomAnimationsنحوه‌ی نمایش و خروج فرگمنت را با استفاده از این متد تعیین می‌کنیم.
.()commitدستور اجرای متد است.

نکته: همانطور که در قسمت recyclerView توضیح دادم، بهتر است فرآیندهایی که برای انجام یک کار باید انجام دهیم را در یک متد قرار دهیم، و آن متد را در جای لازم صدا کنیم. بدین صورت کد ما خوانایی و قابلیت تغییر پذیری بهتری خواهد داشت.

مثال فرگمنت:

در اینجا می‌خواهیم RecyclerView که قبلا ایجاد کردیم را در این فرگمنت نمایش دهیم.

پس ابتدا یک ریسایکلر ویو به fragmen_layout  اضافه می‌کنیم، پس کد ما به شکل زیر خواهد بود

 

نکته اگر لازم است مقاله‌ی ریسایکلر ویو را بخوانید.

پس از آن به همان ترتیبی که درمقاله‌ی مربوط به ریسایکلرویو گفتم، آن را به فرگمنت بیافزایید. در فرگمنت تابع ()initView را در متد ()onCreateView صدا می‌کنیم. پس متد ()onCreateViewی ما به شکل زیر خواهد بود

در آخر با کلیک برروی هریک از آیتم‌های navigationButtom می‌توانیم یک فرگمنت را نشان دهیم.( کد نمایش فرگمنت را در clicklistener آیتم صدا بزنید).

یادآوری

در انتخاب نام‌ها، پکیج‌بندی‌ها و متدها دقت کنید تا بعد خوانایی برنامه و توسعه‌ی اپ برایتان ساده‌تر شود.

می‌توانید فرگمنت‌ها را در یک پکیج و اکتیویتی‌ها را در پکیج دیگری قرار دهید یا اینکه همگی را در پکیجی به نام view قرار دهید. پکیج‌ها را به صورت دستی به برنامه اضافه می‌کنید.

دیدگاه ها

ارسال دیدگاه

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

صفحه اینستاگرام کانال تلگرام