فرگمنت ها در اندروید – Fragment

فرگمنت ها بخشی از اکتیویتی هستند که قابلیت های بیشتری برای طراحی اکتیویتی ارائه می دهند. اشتباه نیست اگر بگوییم فرگمنت به نوعی زیر شاخه ای از اکتیوتی است.

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

  • یک فرگمنت لی‌اوت مختص به خود، رفتار مختص به خود و چرخه اجرای مختص به خود را دارد.
  • شما می توانید هنگامی که اکتیویتی در حال اجرا است، فرگمنت ها را در آن اضافه و حذف کنید.
  • شما می توانید چندین فرگمنت را در اکتیویتی با هم درآمیزید و یک رابط گرافیکی چند سطحی داشته باشید.
  • یک فرگمنت میتواند در چند اکتیویتی استفاده شود.
  • چرخه اجرای فرگمنت بسیار به چرخه اجرای اکتیویتی میزبانش وابسته است یعنی اگر اکتیویتی pause شود، همه فرگمنت های موجود در اکتیویتی هم متوقف می شوند.
  • یک فرگمنت می تواند رفتاری را پیاده سازی کند که هیچ کامپوننت رابط گرافیکی ای نداشته باشد.
  • فرگمنت ها از اندروید Honeycomb یعنی API نسخه ۱۱ به اندروید اضافه شده اند.

 

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

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

در مثال زیر می بینید که چطور دو ماژول رابط کاربری که با فرگمنت طراحی شده است، در تبلت با هم و در یک اکتیویتی نمایش داده می شود اما در گوشی به صورت مجزا نمایش داده می شود.

فرگمنت ها در اندروید - Android Fragment

اپلیکیشن می تواند وقتی در دستگاهی با اندازه تبلت اجرا شده است، در اکتیویتی A، دو فرگمنت را با هم جاسازی کند. در عین حال وقتی در دستگاهی با اندازه هندست نمایش داده می شود، فضای کافی برای نمایش همزمان هر دو فرگمنت وجود ندارد، به همین دلیل اکتیویتی A فقط فرگمنتی که شامل لیست مطالب می شود را نمایش می دهد و وقتی کاربر یک مطلب را از لیست انتخاب کرد، اکتیویتی B را اجرا می کند که شامل فرگمنت دوم برای دیدن مطلب انتخاب شده می باشد.

 

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

فرگمنت ها در اندروید چرخه اجرای مختص به خود را دارند که بسیار شبیه به چرخه اجرای اکتیویتی می باشد. تصویر زیر بخش های مختلف چرخه اجرای اکتیویتی را نشان می دهد.
چرخه اجرای فرگمنت ها - Fragment lifecycle

 

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

  • onAttach(): هر فرگمنت با یک اکتیویتی وابستگی دارد. این متد زمانی که وابستگی فرگنت با اکتیویتی ایجاد می شود، برای انجام کارهای مربوط به مقدار دهی اولیه فراخوانی می شود.
  • onCreate(): سیستم زمان ایجاد فرگمنت، این متد را فراخوانی می کند. شما می توانید کامپوننت های ضروری فرگمنت را مقدار دهی کنید و در متغییر هایی نگهداری کنید تا وقتی که فرگمنت pause یا stop شد و مجددا resume شد بتوانید به این کامپوننت ها دسترسی داشته باشیذ.
  • onCreateView(): سیستم زمانی این متد را فراخوانی می کند که زمان نمایش رابط گرافیکی فرگمنت برای اولین بار باشد. برای نمایش رابط گرافیکی برای فرگمنت خود، باید یک کامپوننت View را در این متد برگردانید یا به اصطلاح return کنید، که این View باید View مربوط به ریشه یا روت رابط کاربری باشد. در صورتی که نمی خواهید فرگمنت UI داشته باشد، null را برگردانید.
  • onActivityCreated(): این متد بعد از فراخوان onCreateView()، یعنی زمانی که اکتیویتی میزبان ایجاد شد فراخوانی می شود. اکتیویتی و فرگمنت به عنوان سلسله مراتب اکتیویتی ایجاد می شوند. در این متد viewها با استفاده از متد  findViewById() قابل دسترس هستند. همچنین می توانید از آبجکت هایی که نیاز به آبجکت Context دارند، نمونه ایجاد کنید.
  • onStart(): این متد زمانی که فرگمنت قابل مشاهده شد فراخوانی می شود.
  • onResume(): این متد زمانی که فرگمنت فعال وقابل استفاده شد فراخوانی می شود.
  • onPause(): این متد لحظه ای که کاربر فرگمنت را ترک کرد فراخوانی می شود.
  • onStop(): زمانی که فرگمنت کاملا متوقف شد این متد فراخوانی می شود.
  • onDestroyView(): بعد از اینکه این منتد فراخوانی شد، view فرگمنت نابود خواهد شد.
  • onDestroy(): این متد برای پاکسازی نهایی فرگمنت فراخوانی می شود، ولی تضمینی وجود ندارد که اندروید این متد را فراخوانی کند.

 

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

با چند گام ساده میتوان فرگمنت ها را ایجاد کرد.

  • قبل از هر چیز تصمیم بگیرید که از چند فرگمنت می خواهید در اکتیویی استفاده کنید. برای مثال فرض کنید که می خواهیم از دو اکتیویتی برای مدیریت حالت landscape و portrait  دستگاه استفاده کنیم.
  • در ادامه به تعداد فرگمنت ها کلاس هایی که از کلاس Fragment مشتق شده باشند ایجاد کنید. کلاس اکتیویتی دارای متد هایی که در بالا توضیح داد شد است. شما می توانید بسته به نیازتان هر کدام از متد هایی بالا را override کنید.
  • برای هر فرگمنت باید یک فایل لی‌اوت xml ایجاد کنید که این فایل ها لی‌اوت های UI برای فرگمنت ها را در بر می گیرند.
  • در نهایت با ویرایش فایل اکتیویتی بسته به نیاز خود فرگمنت ها را جاگذاری و تعویض کنید.

 

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

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

  • فرگمنت های تک فریمی(Single frame fragments): برای دستگاه های کوچک نظیر گوشی های هوشمند استفاده می شوند؛ دستگاه هایی که در یک لحظه تنها ظرفیت نشان دادن یک فرگمنت را دارند.
  • فرگمنت های لیستی(List fragments): این فرگمنت ها مخصوص نمایش لیست هستند.
  • فرگمنت های انتقالی(fragment transaction): با آن ها می توانیم به صورت پیوسته بین فرگمنت ها حرکت کنیم و از یک فرگمنت به فرگمنت دیگر برویم.

امید فرجی

سلام، امید فرجی هستم از همدان. بیشتر از 7 سال میشه که در حوضه برنامه نویسی جاوا و اندروید فعالیت دارم و در این مدت پروژه های تجاری مختلفی انجام دادم. همچنین از سال 91 سایت آموزش تخصصی جاوا را راه اندازی کردم و در خدمت شما هستم. امیدوارم مفید بوده باشم. برای سفارش پروژه هاتون باهام تماس بگیرید.

شما ممکن است این را هم بپسندید

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

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

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