۷

آشنایی با فرگمنت ها در اندروید

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

نکاتی مهم در مورد فرگمنت ها:

  • فرگمنتها لایه بندی، رفتار و چرخه حیات خودشون رو دارن.
  • حتی در هنگام اجرا بودن اکتیویتی نیز میشه تعداد فرگمنتهاش رو کم و زیاد کرد.
  • میشه چندتا فرگمنت رو باهم در یک اکتیویتی ترکیب کرد و رابط کاربری های چندپنجره ای (multi-pane) ساخت.
  • یک فرگمنت رو میشه در چند اکتیویتی استفاده کرد.
  • چرخه حیات فرگمنت با چرخه حیات اکتیویتی میزبانش ارتباط نزدیکی داره و این یعنی وقتی اکتیویتی میزبان متوقف بشه همه فرگمنتهای موجود در اون اکتیویتی نیز متوقف می شن.
  • فرگمنت ها از اندروید Honeycomb اضافه شدن (api v11).
  • A fragment can implement a behavior that has no user interface component.

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

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

در زیر مثالی از چگونگی قرارگرفتن دو فرگمنت در کنار هم در تبلت و جدا از هم در گوشی ها می بینید:

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

چرخه حیات فرگمنت (Fragment Life Cycle)

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

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

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

بخش دوم: هنگامی که یک فرگمنت آماده نشان دادن میشه

  • onStart()
  • onResume()

بخش سوم: هنگامی که فرگمنت به پس زمینه میره

  • onPaused()
  • onStop()

بخش چهارم: موقعی که فرگمنت نابود میشه

  • onPaused()
  • onStop()
  • onDestroyView()
  • onDestroy()
  • onDetach()

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

ابتدا باید تصمیم بگیرید که چه تعداد فرگمنت قراره در یک اکتیویتی استفاده کنید.مثلا ما میخوایم دو فرگمنت داشته باشیم یکی برای حالتlandscape و دیگری برای portrait ( حالت های چرخش صفحه)

بعد از آن باید به تعداد لازم فرگمنت بسازیم، کلاس هایی که از Fragment ارث می برند(extend).حالا باید برای فرگمنت ها یک لایه xml نیز بسازیم.
سرانجام باید در اکتیویتی تغییرات لازم برای نمایش به موقع فرگمنت ها بدیم.در زیر لیستی از متدهای مهم که شما می تونید در کلاس فرگمنتتون override کنید مشاهده می کنید:

onCreate(): سیستم این متد رو وقتی فرگمنت ایجاد میشه صدامی زنه(ممکنه فرگمنت نمایش داده نشده باشه هنوز). شما باید اجزاء مهم فرگمنت که میخواید هنگامی که فرگمنت متوقف(paused) ،ایستاده(stopped) یا ادامه دادن(resumed) هست، حفظ کنید را مقداردهی اولیه کنید.

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

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


کاربرانی که این مطلب را پسندیده اند:

  • avatar