یک Fragment قطعه ای از یک اکتیویتی است که طراحی فعالیت مدولارتر را امکان پذیر می کند. اگر بگوییم فرگمنت یک نوع اکتیویتی فرعی است اشتباه نخواهد بود.
در ادامه نکات مهمی در مورد فرگمنت ذکر شده است:
- یک Fragment طرحبندی خاص خود را دارد و رفتار خاص خود را با تماسهای چرخه حیات خاص خود دارد.
- میتوانید در حین اجرای اکتیویتی، Fragmentهایی را در یک اکتیویتی اضافه یا حذف کنید.
- شما می توانید چند Fragment را در یک اکتیویتی واحد ترکیب کنید تا یک رابط کاربری چند صفحه ای بسازید.
- یک Fragment را می توان در چندین اکتیویتی استفاده کرد.
- چرخه حیات Fragment ارتباط نزدیکی با چرخه حیات اکتیویتی میزبان آن دارد، به این معنی که وقتی اکتیویتی متوقف می شود، تمام Fragmentهای موجود در اکتیویتی نیز متوقف می شوند.
- یک Fragment می تواند رفتاری را اجرا کند که هیچ جزء رابط کاربری ندارد.
- Fragment به API اندروید در نسخه Honeycomb اندروید که API نسخه 11 اضافه شده است.
شما با گسترش کلاس Fragment میتوانید Fragmentهایی ایجاد کنید و میتوانید با اعلام فرگمنت در فایل طرحبندی اکتیویتی، به عنوان عنصر <fragment>، آن فرگمنت را در طرحبندی اکتیویتی خود وارد کنید.
معرفی Fragment
قبل از معرفی Fragment، ما یک محدودیت داشتیم زیرا میتوانیم تنها یک اکتیویتی واحد را در یک نقطه زمانی معین روی صفحه نمایش دهیم. بنابراین ما قادر به تقسیم صفحه نمایش دستگاه و کنترل قسمت های مختلف به طور جداگانه نبودیم. اما با معرفی Fragment، انعطاف پذیری بیشتری به دست آوردیم و محدودیت داشتن یک اکتیویتی واحد در یک زمان روی صفحه را حذف کردیم. اکنون میتوانیم یک اکتیویتی واحد داشته باشیم، اما هر اکتیویتی میتواند شامل چند قطعه باشد که طرحبندی، رویدادها و چرخه زندگی کامل خود را دارند.
در زیر یک مثال معمولی از نحوه ترکیب دو ماژول رابط کاربری تعریف شده توسط Fragmentها در یک اکتیویتی برای طراحی تبلت، اما برای طراحی گوشی از هم جدا شده است.
این برنامه می تواند در هنگام اجرا بر روی دستگاهی به اندازه تبلت، دو فرگمنت را در اکتیویتی A جاسازی کند. با این حال، در صفحهای به اندازه گوشی، فضای کافی برای هر دو بخش وجود ندارد، بنابراین فعالیت A فقط بخش فهرست مقالات را شامل میشود و وقتی کاربر مقالهای را انتخاب میکند، فعالیت B را شروع میکند که شامل بخش دوم برای خواندن مقاله است.
چرخه زندگی Fragment
Fragment اندروید چرخه زندگی خود را بسیار شبیه به یک اکتیویتی اندرویدی ساخته است. در این بخش مراحل مختلف چرخه زندگی آن خلاصه می شود.
در اینجا لیستی از متدهایی وجود دارد که می توانید آنها را در کلاس Fragment خود override کنید.
- onAttach() – نمونه Fragment با یک نمونه اکتیویتی مرتبط است. فرگمنت و اکتیویتی به طور کامل مقداردهی اولیه نشده اند. معمولاً در این متد شما یک ارجاع به اکتیویتی دریافت می کنید که از فرگمنت برای کار اولیه سازی بیشتر استفاده می کند.
- onCreate() – سیستم این متد را هنگام ایجاد فرگمنت فراخوانی می کند. شما باید اجزای اساسی فرگمنت را که می خواهید در زمان توقف اکتیویتی یا توقف فرگمنت حفظ کنید، را مقداردهی کنید.
- onCreateView() – سیستم این callback را زمانی فراخوانی می کند که زمان آن فرا می رسد که فرگمنت برای اولین بار رابط کاربری خود را ترسیم کند. برای ترسیم UI برای فرگمنت خود، باید یک کامپوننت View را از این متد برگردانید که ریشه طرح بندی Fragment شما است. اگر Fragment یک UI ارائه نمی کند، می توانید null را برگردانید.
- onActivityCreated() – متد onActivityCreated() پس از متد onCreateView() هنگام ایجاد اکتیویتی میزبان فراخوانی می شود. در این مرحله می توان با متد findViewById() به view دسترسی پیدا کرد. مثال. در این متد می توانید اشیایی را که به یک شی Context نیاز دارند، نمونه سازی کنید.
- onStart()- متد onStart() زمانی فراخوانی می شود که فرگمنت قابل مشاهده باشد.
- onResume() – این متد زمانی که Fragment فعال می شود فراخوانی میشود.
- onPause() – سیستم این متد را به عنوان اولین نشانه ای که کاربر فرگمنت را ترک می کند فراخوانی می کند. این معمولاً جایی است که باید هر گونه تغییری را که باید پس از جلسه کاربر فعلی ادامه یابد، انجام دهید.
- onStop() – سیستم زمانی این متد را فراخوانی میکند که fragment متوقف شود.
- onDestroyView() – نمای fragment پس از فراخوانی این متد از بین می رود.
- onDestroy() – متد onDestroy() برای انجام پاکسازی نهایی وضعیت fragment فراخوانی میشود اما تضمینی برای فراخوانی آن توسط پلتفرم اندروید وجود ندارد.
چگونه از یک Fragment استفاده کنیم؟
این کار شامل چندین مرحله ساده برای ایجاد فرگمنت است.
- اول از همه تصمیم بگیرید که چه تعداد فرگمنت می خواهید در یک اکتیویتی استفاده کنید. به عنوان مثال، اجازه دهید از دو فرگمنت برای مدیریت حالت افقی و عمودی دستگاه استفاده کنیم.
- سپس بر اساس تعداد Fragment، کلاس هایی ایجاد کنید که کلاس فرگمنت را گسترش می دهند. کلاس Fragment دارای توابع فراخوانی است که در بالا ذکر شد. شما می توانید هر یک از توابع را بر اساس نیاز خود override کنید.
- برای هر فرگمنت، باید فایل های طرح بندی را در فایل XML ایجاد کنید و آن را روی فرگمنت تنظیم کنید.
- در نهایت فایل اکتیویتی را تغییر دهید تا منطق واقعی جایگزینی فرگمنت بر اساس نیاز شما تعریف شود.
انواع Fragment
اساساً Fragmentها بر اساس نیاز به سه بخش تقسیم میشوند:
- Fragmentهای تک فریم – Fragmentهای تک فریم برای دستگاههای نگهدارنده دستی مانند موبایل استفاده میشوند، در اینجا میتوانیم تنها یک فرگمنت را نشان داد.
- لیست Fragmentها – Fragmentهای که نمای لیست خاصی دارند به عنوان Fragmentهای لیست مشخص می شوند.
- Fragment های قابل جابجایی – با استفاده از تراکنش فرگمنت ما می توانیم یک فرگمنت را به فرگمنت دیگر منتقل کنیم.