قطعات اندروید (Android Fragments )

یک قطعه (Fragment) بخشی از واسط کاربری یک اپلیکیشن و یا رفتاری است که شما میتوانید آن را در یک فعالیت قرار دهید. این مولفه امکان طراحی پیمانه ای بیشتر فعالیت ها را فراهم میکند. می توان گفت که یک قطعه نوعی فعالیت فرعی (sub-acitivity) است. در زیر نکات مهم مربوط به قطعه آورده شده است .

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

شما قطعات را با توسعه کلاس Fragment ایجاد می کنید و می توانید با معرفی کردن یک قطعه به عنوان یک عنصر <fragment>، در فایل صفحه بندی فعالیت، آن را در صفحه بندی فعالیت خود وارد کنید.

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

 

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

چرخه حیات قطعه

قطعات اندرویدی دارای چرخه حیات خاص خود هستند که بسیار شبیه به چرخه حیات یک فعالیت اندرویدی است. این بخش، مراحل مختلف این چرخه حیات را به صورت خلاصه بیان می کند.

قطعه

 

onAttach()  در این متد منبعی را برای اکتیویتی جهت کارهای پیاده سازی دریافت میکنید. onCreate() این متد زمانی اجرا میشود که فرگمنت بوجود بیاید ، شما باید اجزای ضروری را که قرار است هنگام pause یا stop شدن حفظ شود و با resume برگردانده شود ، را در اینجا تعریف کنید.

onCreateView()  این متد زمانی اجرا میشود که فرگمنت آماده ی نمایش رابط کاربری خود هست برای اینکه بتوانید UI خاصی را برای فرگمنت خود نمایش دهید باید اجزای آن را توسط این متد برگردانید . این متد ریشه ی اصلی UI فرگمنت شما هست و اگر فرگمنت شما بدون رابط کاربری هست میتوانید null برگردانید.

onActivityCreated()  این متد دقیقا بعد از متد onCreateView()  اجرا میشود زمانی که اکتیویتی اصلی که فرگمنت مربوط به آن هست بوجود بیاید.  فرگمنت و اکتیویتی همزمان بوجود می آیند زمانی که رابط کاربری اکتیویتی نمایش داده شود . در این مرحله ، شما میتوانید به تمام view ها با استفاده از متد  findViewById()  دسترسی داشته باشید. onStart() زمانی که فرگمنت نمایش داده شد این متد برای یکبار اجرا میشود .

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

onPause() این متد زمانی اجرا میشود که کاربر فرگمنت را ترک کند به اصطلاحی فرگمنت به حالت pause درآید . در این متد هست که شما باید تمام تغییرات را ذخیره کنید.

onStop() زمانی که فرگمنت متوقف شود این متد اجرا میشود.

onDestroyView() رابط کاربری مربوط به فرگمنت ، بعد از اجرای این متد از بین میرود.

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

چطور از قطعات استفاده کنیم؟

در ادامه تعدادی گام ساده برای ایجاد قطعات، ارائه شده است.

  • اول از همه، تصمیم بگیرید که در یک فعالیت می خواهید از چند قطعه استفاده کنید. برای مثال فرض کنید که ما می خواهیم از دو قطعه برای مدیریت حالت های افقی و عمودی دستگاه استفاده کنیم.
  • سپس بر اساس تعداد قطعات، کلاس هایی را ایجاد کنید که کلاس Fragment را توسعه می دهند. کلاس Fragment دارای توابع callback مطرح شده در قسمت بالا است. شما می توانید هر کدام از توابع را بسته به نیاز خود override کنید.
  • متناظر با هر قطعه، شما باید فایل های صفحه بندی را در فایل XML ایجاد کنید. این فایل ها شامل صفحه بندی مربوط به قطعات تعریف شده هستند.
  • در نهایت، فایل فعالیت را برای تعریف منطق قطعات جایگزین شده بر مبنای نیاز خود،تغییر دهید.

در ادامه لیست متدهای مهمی که شما می توانید در کلاس fragment خود، آنها را override کنید، ارائه شده است:

onCreate() : سیستم این متد را در زمان ایجاد قطعه فراخوانی می کند. شما باید در این متد اجزای ضروری قطعه را مقدار دهی اولیه کنید. این اجزا، آنهایی هستند که در زمان متوقف شدن یا از کار افتادن قطعه و شروع به کار مجدد آن، نمی خواهید مقادیر آنها را از دست بدهید.

onCreateView() : سیستم این callback را زمانی فراخوانی می کند که قطعه برای اولین بار واسط کاربری خود را ترسیم می کند. برای ترسیم یک واسط کاربری برای قطعه خود، شما باید یک مولفه View از این متد برگردانید که ریشه (root) صفحه بندی قطعه شماست. در صورتی که قطعه یک واسط کاربری را ایجاد نمی کند، شما می توانید null را برگردانید.

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

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

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

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