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

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

شما می توانید، در زمان اجرای یک فعالیت، قطعاتی را به آن اضافه و یا از آن حذف کنید.

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

یک قطعه می تواند در چندین فعالیت مورد استفاده قرار بگیرد.

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

یک قطعه می تواند رفتاری را پیاده سازی کند که دارای هیچ مولفه واسط کاربری نیست.

قطعات در نسخه­ ی Honeycomb اندروید به Android API اضافه شده اند که شامل API نسخه ۱۱ است.

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

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

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

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

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

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

فاز ۱: زمانی که یک قطعه ایجاد می شود، می تواند وضعیت های زیر را داشته باشد .

onAttach()

onCreate()

onCreateView()

onActivityCreated()

فاز ۲: زمانی که قطعه قابل مشاهده می شود، می تواند وضعیت های زیر را داشته باشد .

onStart()

onResume()

فاز ۳: زمانی که یک قطعه به مود(حالت) پس زمینه می رود، می تواند وضعیت های زیر را داشته باشد.

onPaused()

onStop()

فاز ۴: زمانی که یک قطعه از بین می رود، می تواند وضعیت های زیر را داشته باشد .

onPaused()

onStop()

onDestroyView()

onDestroy()

onDetach()

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

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

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

سپس بر اساس تعداد قطعات، کلاس هایی را ایجاد کنید که کلاس Fragment را توسعه می دهند. کلاس Fragment دارای توابع callback مطرح شده در قسمت بالا است. شما می توانید هر کدام از توابع را بسته به نیاز خود override کنید.

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

در نهایت، فایل فعالیت را برای تعریف منطق قطعات جایگزین شده بر مبنای نیاز خود، تغییر دهید.

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

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

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

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

مثال

این مثال، شرح می­ دهد که شما چگونه می تواند Fragments خود را ایجاد کنید. در اینجا ما دو قطعه را ایجاد می کنیم. یکی از آنها زمانی استفاده می شود که دستگاه در حالت افقی (landscape mode) قرار دارد و دیگری برای زمانی است که دستگاه در حالت عمودی (portrait mode) قرار دارد. مراحل زیر را شبیه به آنچه که ما در مثال Hello World Example انجام دادیم، دنبال کنید.

مرحله

توصیف

۱

از Eclipse IDE برای ایجاد یک اپلیکیشن اندرویدی استفاده کنید و آن را تحت پکیج com.example.myfragments با یک فعالیت خالی، MyFragments بنامید.

۲

فایل فعالیت اصلی MainActivity.java را همانطور که در ادامه نشان داده شده است، تغییر دهید. در اینجا ما جهت گیری دستگاه (افقی یا عمودی) را چک میکنیم و با توجه به آن بین قطعات مختلف جابجا می شویم.

۳

برای تعریف قطعات و متدهای مربوط به آنها، دو فایل جاوای PM_Fragment.java و LM_Fragement.java را تحت پکیج com.example.myfragments ایجاد کنید.

۴

فایل های صفحه بندی res/layout/lm_fragment.xml و res/layout/pm_fragment.xml را ایجاد کنید و صفحه بندی خود را برای هر دو قطعه تعریف کنید.

۵

محتوای پیش فرض فایل res/layout/activity_main.xml را برای وارد کردن دو قطعه تغییر دهید.

۶

ثابت های لازم را در فایل res/values/strings.xml تعریف کنید.

۷

برای راه اندازی امولاتور اندروید اپلیکیشن را اجرا کنید و نتایج تغییرات اعمال شده در اپلیکیشن را بررسی کنید.

در ادامه محتوای تغییر یافته­ ی فایل فعالیت اصلی

src/com.example.mycontentprovider/MainActivity.java ارائه شده است.

دو فایل قطعه­ ی LM_Fragement.java و PM_Fragment.java را تحت پکیج com.example.mycontentprovider ایجاد کنید.

در ادامه محتوای فایل LM_Fragement.java ارائه شده است.

در ادامه محتوای فایل PM_Fragement.java نمایش داده شده است.

در فایل صفحه بندی lm_fragement.xml و pm_fragment.xml را تحت دایرکتوری res/layout ایجاد کنید.

در ادامه محتوای فایل lm_fragement.xml نمایش داده شده است.

در ادامه محتوای فایل pm_fragment.xml نمایش داده شده است.

در ادامه محتوای فایل res/layout/activity_main.xml ارائه شده است که شامل دو قطعه است.

مطمئن شوید که فایل res/values/strings.xml شما، دارای محتوای زیر است.

اکنون می خواهیم اپلیکیشن MyFragments را اجرا کنیم. من فرض می­ کنم که شما AVD خود را در زمان نصب محیط ایجاد کرده باشید. برای اجرای اپلیکیشن از Eclipse، یکی از فایل های فعالیت پروژه­ ی خود را باز کنید و بر روی آیکن Run از نوار ابزار کلیک کنید. Eclipse، اپلیکیش را بر روی AVD شما نصب می کند و آن را آغاز می کند و در صورتی که همه­ ی موارد مربوط به تنظیمات و برنامه شما درست باشد، صفحه امولاتور برای شما نمایش داده می شود که با کلیک بر روی دکمه Menu، پنجره زیر را می بینید. شکیبا باشید چون این کار بسته به سرعت کامپیوتر شما قدری زمان می برد.

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

فشردن کلیدهای fn+control+F11 در Mac برای تغییر حالت افقی به عمودی و برعکس.

فشردن کلیدهای ctrl+F11 در ویندوز

فشردن کلیدهای ctrl+F11 بر روی لینوکس

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

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