آموزش اندروید فصل دوم قسمت هشتم – فرگمنت

android-part-2

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

آموزش اندروید فصل دوم قسمت هشتم – فرگمنت

توجه : برای مشاهده تصاویر در سایز اصلی بر روی آنها کلیک کنید.

فرگمنت ها

در آموزش های پیش آموختیم که یک اکتیویتی چیست و چگونه میتوان از آن استفاده کرد.در صفحه های کوچک (مثل گوشی های هوشمند) یک اکتیویتی تمام صفحه را اشغال میکند پس با استفاده از چند نما(View) به رابط کاربری برنامه خود شکل میدهیم.یک اکتیویتی اصولا ظرفی برای نماها است.اما اگر برنامه در یک صفحه نمایش بزرگتر مانند تبلت نمایش داده شود کاملا به هم ریخته خواهد شد چرا که نمایش شما برای صفحه کوچکتر طراحی شده و برای صفحه های بزرگتر نیز میبایستی دوباره چینش صوت بگیرد.این حالت باعث پیچیدگی در طراحی نما خوهد شد. ایده بهتر برای رفع این مشکل ایجاد چند اکتیویتی کوچک است که هرکدام دارای نمای خود باشد.در زمان یک اکتیویتی میتواند شامل چندین اکتیویتی کوچک باشد که البته جهت آن بستگی جهت صفحه نمایش دارد(عمودی یا افقی) در اندروید ۳ به بالا این اکتیویتی های کوچک را فرگمنت ها گویند.

تصور کنید فرگمنت یک نوع دیگر از اکتیویتی است.فرگمنت ها برای نمایش نما بوجود می آیند کاملا مثل اکتیویتی ها. فرگمنت ها همیشه در دل اکتیویتی ها جای میگیرند برای مثال تصویر زیر را در نظر بگیرید

آموزش کاربردی اندروید-قسمت شانزدهم

طبق تصویر فوق تصور کنید Fragment 1 یک لیست از عناوین کتاب است و Fragment 2 حاوی یک TextView و ImageView و… میباشد.

حال فرض کنید برنامه را درون یک دستگاه اندروید در حالت عمودی(مثل یک گوشی هوشمند) اجر کنیم اجرا کنیم در این صورت ممکن است فرگمنت ۱ در یک اکتیوتی و فرگمنت ۲ در اکتیویتی دیگر قرار گیرد هرگاه کابر آیتمی را از لیت فرگمنت ۱ انتخاب کند فرگمنت ۲ اجرا شود.

آموزش کاربردی اندروید-قسمت شانزدهم

حال اگر برنامه را به صورت افقی درون دستگاهی مانند تبلت نمایش دهیم هردو فرگمنت کنار یکدیگر اجرا میشوند

آموزش کاربردی اندروید-قسمت شانزدهم

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

چرخه زندگی فرگمنت ها

همانند اکتیوتی ها فرگمنت ها نیز چرخه زندگی دارند هنگام ایجاد یک فرگمنت حالات زیر رخ میدهد

  • ()onAttach
  • ()onCreate
  • ()onCreateView
  • ()onActivityCreated

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

  • ()onStart
  • ()onResume

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

  • ()onPause
  • ()onStop

وقتی که فرگمنت نابود میگردد(یعنی زمانی که یک اکتیوتی میزبان فرگمنت را نابود میکند)

  • ()onPause
  • ()onStop
  • ()onDestroyView
  • ()onDestroy
  • ()onDetach

همانند اکتیویتی ها میتوان یک وهله از فرگمنت را به وسیله شی Bundle در حالت زیر بازیابی کرد

  • ()onCraeate
  • ()onCreateView
  • ()onActivityCreate
.

بیشتر حالاتی که ممکن است برای فرگمنت اتفاق بیفتد شبیه حالاتی است که برای اکتیویتی آن اتفاق می افتد چند حالت که مختص فرگمنت ها هستند به شرح ذیل است :

  • ()onAttached : وقتی که فرگمنتی به اکتیویتی ملحق میشود فراخوانی میگردد.
  • ()onCreatedView : برای ایجاد view در فرگمنت فراخوانی میشود.
  • ()onActivityCreated : وقتی که متد ()onCreate اکتیوتی تمام شد فراخوانی میشود.
  • ()onDestroyView : وقتی که view فرگمنت حذف شود فراخوانی میگردد.
  • ()onDetach : وقتی که فرگمنتی از اکتیویتی جدا شود فراخوانی میگردد.

نکته قابل توجه دررابطه با تفاوت اکتیویتی ها و فرگمنت این است که زمانی که اکتیوتی به پس زمینه میرود درواقع back stack قرار میگیرد.این نکته به اکتیویتی اجازه میدهد تا وقتی کابر دکمه back رافشرد اکتیویتی قابل برگشت باشد. اما در مورد فرگمنت ها این اتفاق به صورت خودکار صورت نمیپذیرد و در back stack قرار نمیگیرند مگر اینکه متد ()addToBackStack را در تراکنش های فرگمنت به صورت صریح فراخوانی کنید.

حال یک مثال ساده برای فرگمنت ها آموزش میدهیم که براساس افقی یا عمودی بودن صفحه دستگاه یکی از فرگمنت هارا نمایش میدهد

ابتدا پروژه جدیدی با نام FragmentsPrj ایجاد کرده و دو فایل xml با نام های fragment1 و fragment 2 در مسیر res/layout ایجاد کرده و محتویاتشان را چنان تغییر میدهیم

محتوی fragment1 که تنها یک textview ایجاد کرده و در صورت افقی بودن نشان داده میشود

 

محتوی fragment 2 که در صورت عمودی بودن دستگاه نشان داده میشود

حال درون فایل activity_main.xml چنین کدنویسی میکنیم

حال دو کلاس جاوا برای دو فرگمنت ایجاد شده با نام های Fragment1 و Fragment2 ایجاد کرده و درون فایل Fragment1.java چنین کدنویسی میکنیم

.

و درون فایل Fragment2.java نیز بدین صورت

حال در MainActivity.java برای مشخص کردن اکتیویتی مناسب و نمایش آن چنین کدنویسی میکنیم

حال میتوان برنامه را اجرا کرد و نتیجه ا بسته به دستگاه اجرا کننده مطابق شکل زیر ببینید

آموزش کاربردی اندروید-قسمت شانزدهم

روش کار

یک فرگمنت بسیار به اکتیویتی شباهت دارد چرا که دارای کلاس جاوا است و همچنین رابط کاربری خود را از xml بارگذاری میکند.کلاس جاوایی که برای فرگمنت نوشته میشود باید کلاس پایه fragment را بسط دهد

برای ترسیم رابط کاربری یک فرگمنت متد onCreateView() را override میکنیم این متد یک شی از نوع View را برمیگرداند

       

در اینجا از شی LayoutInflater برای برجسته کردن رابط کاربری از فایل xml موردنظر (در این مورد R.layout.fragment2) استفاده شده.آرگومان container به ViewGroup والد اشاره داردکه همان اکتیویتی است که شما سعی دارید آن را در فرگمنت Enable کنید. آرگومان savedInstanceState به شما این قابیت را میدهد تا فرگمنت را به حالت ذخیره شده قبلی بازگردانید.

برای افزودن فرگمنت به اکتیویتی نیز از عنصر <fragment> استفاده میکنیم.

به این نکته دقت کنید که به هر فرگمنت یک شناسه منحصر به فرد اختصاص دهید. میتوان این کار را به وسیله ویژگی های android:id یا android:tag انجام داد.

مدرس : خانم مهندس داودی نژاد

آموزش اندروید فصل دوم قسمت هفتم

آموزش اندروید فصل دوم قسمت نهم

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

مطالب مرتبط

نظر بدهید

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