تخفیف نوروزی پی استور

کد تخفیف: PR1404

شامل تمامی آثار
روز
ساعت
دقیقه
ثانیه

با خرید اشتراک ویژه ، با هزینه بسیار کمتر به فایل های پاورپوینت دسترسی داشته باشید!

آموزش اندروید پیشرفته – فراگیری فرگمنت Fragment در اندروید استادیو با کاتلین

آموزش اندروید پیشرفته – فراگیری فرگمنت Fragment در اندروید استادیو با کاتلین
در این پست از آموزش اندروید پیشرفته به بررسی فرگمنت Fragment در اندروید استادیو با زبان برنامه نویسی کاتلین خواهیم پرداخت. فرگمنت یک زیر مجموعه یا بخشی از یک Activity است که به واسطه آن یک رابط کاربری چند قسمتی ایجاد می شود و به کمک آن می‌توان دستگاه ها و سایز‌های مختلف برنامه را مدیریت کرد. در این آموزش، Fragments را با زبان Kotlin، برای ایجاد یک اپلیکشن که نژادهایی از سگ ها را نمایش می دهد، آموزش خواهیم داد.

فهرست مطالب

مقدمه آموزش اندروید پیشرفته

Fragment یک مبحث مهم در آموزش اندروید پیشرفته است. قطعه، فرگمنت یا Fragment یک کامپوننت از Android است که بخشی از رفتار و یا رابط کاربری یک Activity را در خود جای می‌دهد. همانطور که از نام آن پیداست، Fragmentها موجودیت‌های مستقلی نیستند، بلکه به یک Activity منفرد گره خورده اند. از بسیاری جهات، فرگمنت ها عملکردی مشابه Activity ها دارند.

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

اگر پروژه های بزرگ یا پیچیده انجام نمی‌‌دهید، لازم نیست از Fragment استفاده کنید ولی در پروژه های بزرگ مجبور خواهید بود تا قسمت های مختلف پروژه خودتان را با Fragment کردن انجام دهید. فرگمنت ها می توانند مزایای خوبی را ارائه دهند:

  • ماژولاریتی Modularity: تقسیم کد Activity پیچیده در قطعات برای سازماندهی و نگهداری بهتر.
  • قابلیت استفاده مجدد Reusability: قرار دادن رفتار یا بخش های رابط کاربری در قطعاتی که چندین Activity می توانند به اشتراک بگذارند.
  • سازگاری Adaptability: نمایش بخش‌های یک رابط کاربری به عنوان قطعات مختلف و استفاده از طرح‌بندی‌های مختلف بسته به جهت و اندازه صفحه نمایش.

قطعه، فرگمنت یا Fragment

در این آموزش، شما یک پایگاه داده کوچک از سگ‌ها می‌سازید که لیستی از نژادهایی را که در یک شبکه مرتب شده‌اند را نمایش می‌دهد. هنگامی که کاربر نژادی را انتخاب می‌کند، برنامه اطلاعات مربوط به آن را نمایش می‌دهد. از طریق ساخت این برنامه یاد خواهید گرفت که چگونه:

  • ایجاد و اضافه کردن Fragment به یک Activity چگونه انجام می شود.
  • چگونه Fragmentها اطلاعاتی را به یک Activity ارسال می کنند.
  • با استفاده از تراکنش ها (transactions)، Fragmentها را اضافه و جایگزین کنید.

در این آموزش فرض بر این که با اصول اولیه برنامه‌نویسی اندروید آشنا هستید و مفهوم چرخه حیات فعالیت را می‌دانید. اگر با اندروید کاملاً تازه کار هستید، می توانید آموزش برنامه نویسی اندروید (Android) با پایتون را از مجموعه پی استور دانلود کنید.

شروع کار با Fragment اندروید

در ادامه آموزش، کار را با ایجاد اولین پروژه آغاز می‌کنیم. برای شروع کار، فایل لازم برای متریال‌ها را از اینجا (+) دانلود کنید و پس از Extact کردن، پوشه Starter را از طریق Android Studio باز یا Import کنید.

شروع کار با Fragment اندروید

پس از اینکه فایل‌های دانلودی به طور کامل لود شدند منتظر بمانید تا دیگر وابستگی‌های لازم سیستم اندروید استادیو نیز دانلود و نصب شود. اگر برنامه بخوبی باز شود می‌توانید پروژه را با نام ElDogo بررسی کنید. در این پروژه می‌توانید برخی از فایل‌های منبع را همچون strings.xml، activity_main.xml، drawable و layout را مشاهده کنید.

MainActivity همه فرگمنت‌های کوچک شما را میزبانی می‌کند و DogListFragment حاوی کد برای نمایش لیستی از نژاد سگ‌ها است تا بتوانید روی فرگمنت‌ها تمرکز کنید. پس از built کردن پروژه آن را اجرا کنید:

built کردن پروژه

در اولین خروجی از پروژه حتماً متوجه خواهید بود که برنامه خیلی ساده است ولی جای نگرانی نیست خیلی سریع ادامه پروژه را جلو خواهیم رفت پس با ادامه آموزش اندروید پیشرفته با ما همراه باشید.

چرخه حیات فرگمنت اندروید در آموزش اندروید پیشرفته

مانند یک Activity، یک Fragment دارای چرخه حیات با رویدادهایی است که هنگام تغییر وضعیت Fragment رخ می‌دهد. به عنوان مثال، یک رویداد زمانی رخ می‌دهد که Fragment قابل مشاهده و فعال می‌شود، یا زمانی که Fragment بدون استفاده می‌شود و حذف می‌شود. همچنین می‌توانید همانند یک Activity، کد و رفتارهایی را برای این رویدادها callback کنید. نمودار چرخه حیات Fragment بصورت زیر خواهد بود:

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

با اضافه کردن یک Fragment، رویدادهای چرخه حیات زیر وارد عمل می‌شود:

  • onAttach: فرگمنت به Activity میزبان خود متصل می‌شود.
  • onCreate: یک نمونه Fragment جدید مقداردهی اولیه می‌شود، که همیشه پس از اتصال به میزبان اتفاق می‌افتد.
  • onCreateView: یک Fragment بخشی از سلسله مراتب view را ایجاد می کند که به سلسله مراتب نمای Activity آن اضافه می‌شود.
  • onActivityCreated: فعالیت Fragment رویداد onCreate خودش را به پایان رسانده است.
  • onStart: فرگمنت قابل مشاهده است. یک Fragment فقط پس از شروع Activity شروع می شود.
  • onResume: فرگمنت قابل مشاهده و قابل تعامل است. یک Fragment تنها پس از از سرگیری Activity آن از سر گرفته می‌شود.
  • onPause: فرگمنت دیگر قابل تعامل نیست. این عمل زمانی اتفاق می‌افتد که یا Fragment در شرف حذف یا جایگزینی است یا زمانی که فعالیت Fragment متوقف می‌شود.
  • onStop: فرگمنت دیگر قابل مشاهده نیست. این اتفاق یا پس از حذف یا جایگزینی Fragment یا زمانی که فعالیت Fragment متوقف می شود رخ می‌دهد.
  • onDestroyView: نما و منابع مرتبط ایجاد شده در onCreateView از سلسله مراتب نمای اکتیویتی حذف شده و از بین می‌روند.
  • onDestroy: فرگمنت پاکسازی نهایی خود را انجام می‌دهد.
  • onDetach: فرگمنت از فعالیت خود جدا می‌شود.

همانطور که می بینید، چرخه حیات Fragment با چرخه حیات Activity در هم تنیده می‌شود. اما رویدادهای اضافی دارد که به سلسله مراتب نمای Fragment، حالت و پیوست به Activity آن اختصاص دارد.

کتابخانه پشتیبانی V4

در اندروید هنگام استفاده از فرگمنت‌ها، دو پیاده سازی فرگمنت جایگزین وجود دارد که می‌توانید از آن‌ها استفاده کنید. یک نوع فرگمنت ای است که توسط نسخه پلتفرم ارائه شده است. نسخه پلتفرم مربوط به نسخه اندرویدی است که کاربر در حال اجرا است. به عنوان مثال، دستگاهی که Android نسخه ۶.۰، SDK نسخه ۲۳ را اجرا می کند، پلتفرم نسخه ۲۳ کتابخانه را اجرا می کند.

نوع دوم یک فرگمنت کتابخانه پشتیبانی است. هنگامی که یک کتابخانه پشتیبانی اضافه می‌کنید، استفاده از کتابخانه پشتیبانی دو مزیت در هنگام توسعه برنامه‌های کاربردی برای چندین نسخه اندروید دارد. اول، تضمین می‌کند که کد و توابع خود در دستگاه‌های مختلف و نسخه‌های پلتفرم سازگاری داشته باشید. این بدان معنی است که اشکالات و رفع اشکال در نسخه های مختلف اندروید با استفاده از این کتابخانه‌ها سازگارتر خواهد بود. دوم، هنگامی که ویژگی‌های جدیدی را به آخرین نسخه اندروید اضافه می‌کنید، تیم Android اغلب این ویژگی‌ها را از طریق کتابخانه پشتیبانی به منظور توسعه‌دهندگان برای استفاده در نسخه‌های قدیمی‌تر اندروید، به عقب منتقل می‌کند. پس، از کدام کتابخانه باید استفاده کنید؟

Android دارای Fragment پلت فرم منسوخ در Android 9.0، SDK نسخه ۲۸ است. بنابراین هنگام استفاده از Fragment ها، همیشه باید از کتابخانه پشتیبانی v4 استفاده کنید.

ایجاد یک Fragment

در پروژه باز شده می توانید روی هر یک از موارد، جزئیات مربوط به آموزش را مشاهده کنید. فایل fragment_dog_details.xml را در زیر app▸ src ▸ main▸ res ▸ layout پیدا کنید. این فایل XML نمایش جزئیات سگ ها را نشان خواهد داد و یکی از منابع drawble و String مرتبط را نمایش می دهد.

ایجاد یک Fragment

فایل DogDetailsFragment.ky را در پروژه پیدا کنید. این کلاس مسئول نمایش جزئیات برای یک نژاد انتخابی خواهد بود. در DogDetailsFragment.kt، کد به صورت زیر است:

import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup

//۱
class DogDetailsFragment : Fragment() {

  //۲
  companion object {

    fun newInstance(): DogDetailsFragment {
      return DogDetailsFragment()
    }
  }

  //۳
  override fun onCreateView(inflater: LayoutInflater, 
                            container: ViewGroup?, 
                            savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment_dog_details, container, false)
  }

}

این کد DogDetailsFragment را به عنوان زیر کلاس Fragment اعلان می کند. به import android.support.v4.app.Fragment توجه کنید که از کتابخانه پشتیبانی v4 است که قبلا ذکر شد. هر Activity دارای یک FragmentManager است که فرگمنت آن را مدیریت می کند. همچنین یک رابط برای دسترسی، افزودن و حذف آن فرگمنت ها برای شما فراهم می کند. متوجه خواهید شد که در حالی که DogDetailsFragment یک متد نمونه factory دارد، newInstance، هیچ سازنده ای ندارد.

چون هیچ سازنده ای تعریف نکردید، کامپایلر به طور خودکار یک سازنده خالی و پیش فرض تولید می کند که آرگومان نمی گیرد. احتمالاً می‌دانید که اندروید ممکن است وقتی برنامه به پس‌زمینه می‌رود، یکActivity و تمام فرگمنت ها مرتبط با آن را از بین ببرد و بعداً دوباره ایجاد کند. هنگامی که اکتیویتی باز می گردد، FragmentManager آن با استفاده از سازنده پیش فرض خالی شروع به ایجاد مجدد فرگمنت ها می کند. به همین دلیل، بهترین روش این است که هرگز سازنده های غیر خالی را اعلان نکنید. در واقع، ساده ترین کار این است که هیچ کدام را مانند آنچه در آموزش انجام دادید، مشخص نکنید.

اضافه کردن فرگمنت در آموزش اندروید پیشرفته

خوب در این مرحله از آموزش اندروید پیشرفته می‌توانیم با استفاده از ساده‌ترین روش، یک Fragment را به Activity اضافه کنیم این نوع اضافه کردن، اضافه کردن استاتیک نامیده می شود. برای انجام این کار، activity_main.xml را باز کنید، تب Text را انتخاب کنید و موارد زیر را در داخل FrameLayout ریشه اضافه کنید:

<fragment
  android:id="@+id/details_fragment"
  class="com.raywenderlich.android.eldogo.DogDetailsFragment"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>

در این مرحله، یک تگ <fragment> را در activity layout قرار می‌دهید و نوع فرگمنت را که ویژگی کلاس باید ایجاد کند را مشخص می‌کنید. FragmentManager به شناسه نمای <fragment> نیاز دارد. با گنجاندن آن در XML، FragmentManager می داند که این فرگمنت را به طور خودکار به Activity اضافه کند.

activity layout

اضافه کردن فرگمنت بصورت داینامیک

ابتدا activity_main.xml را دوباره باز کنید و <fragment> را که وارد کرده اید حذف کنید. DogListFragment.kt را باز کنید که همه کدهای لیست را دارد. می توانید ببینید که DogListFragment هیچ سازنده و ()newInstance ندارد. کد لیست در DogListFragment به برخی منابع بستگی دارد. شما باید اطمینان حاصل کنید که فرگمنت دارای یک مرجع معتبر به یک Context برای دسترسی به آن منابع است. اینجاست که ()onAttach وارد عمل می شود. در DogListFragment.kt و این کدها را اضافه کنید:

import android.os.Bundle
import android.support.v7.widget.GridLayoutManager

GridLayoutManager به قرار دادن آیتم ها در لیست نژاد کمک می کند. در داخل DogListFragment.kt، متد زیر را بالای تعریف DogListAdapter اضافه کنید:

override fun onAttach(context: Context?) {
  super.onAttach(context)

  if (context != null) {
    // Get dog names and descriptions.
    val resources = context.resources
    names = resources.getStringArray(R.array.names)
    descriptions = resources.getStringArray(R.array.descriptions)
    urls = resources.getStringArray(R.array.urls)

    // Get dog images.
    val typedArray = resources.obtainTypedArray(R.array.images)
    val imageCount = names.size
    imageResIds = IntArray(imageCount)
    for (i in 0 until imageCount) {
      imageResIds[i] = typedArray.getResourceId(i, 0)
    }
    typedArray.recycle()
  }
}

متد ()onAttach حاوی کدی است که به منابعی مانند نام نژاد و توضیحات مورد نیاز شما از طریق Context که فرگمنت به آن متصل است دسترسی دارد. از آنجایی که کد در ()onAttach است، می توانید مطمئن باشید که فرگمنت دارای یک Context معتبر است. این متد را درست بعد از ()onAttach قرار دهید:

override fun onCreateView(inflater: LayoutInflater, 
                          container: ViewGroup?, 
                          savedInstanceState: Bundle?): View? {
  val view: View = inflater.inflate(R.layout.fragment_dog_list, container,
    false)
  val activity = activity as Context
  val recyclerView = view.findViewById<RecyclerView>(R.id.recycler_view)
  recyclerView.layoutManager = GridLayoutManager(activity, 2)
  recyclerView.adapter = DogListAdapter(activity)
  return view
}

در ()onCreateView، سلسله مراتب نمای DogListFragment را که حاوی RecyclerView است و برخی از تنظیمات استاندارد RecyclerView را انجام می دهید. اگر قرار باشد view یک tv’lkj را بررسی کنید، ()onCreateView مکان خوبی برای شروع است زیرا view را ایجاد می کند. MainActivity.kt را باز کنید و موارد زیر را به انتهای ()onCreate اضافه کنید:

// ۱
if (savedInstanceState == null) {
  // ۲
  supportFragmentManager
          // ۳
          .beginTransaction()
          // ۴
          .add(R.id.root_layout, DogListFragment.newInstance(), "dogList")
          // ۵
          .commit()
}

در این مرحله، برای وارد کردن DogListFragment به MainActivity از دوست جدید خود FragmentManager، می خواهید که این کار را انجام دهد. همانطور که در کدهای بالا مشاهده می کنید اعدادی برای توضیحات درج شده است که یک به یک توضیح داده می شوند.

  1. بررسی کنید که savedInstanceState مقدارش null باشد. این راهی است برای دیدن باز شدن اولیه صفحه.
  2. FragmentManager را با ارجاع به supportFragmentManager به جای fragmentManager بگیرید، زیرا از فرگمنت پشتیبانی استفاده می کنید.
  3. از FragmentManager بخواهید با فراخوانی ()beginTransaction تراکنش جدیدی را شروع کند.
  4. با فراخوانی add و passing عملیات افزودن مورد نظر خود را مشخص کنید
  5. در نهایت از FragmentManager بخواهید که تراکنش را با فراخوانی ()commit اجرا کند.

در کد بالا، یک بلوک if حاوی کدی است که فرگمنت را نمایش می‌دهد و بررسی می‌کند که Activity حالت ذخیره‌شده نداشته باشد. هنگامی که یک اکتیویتی ذخیره می شود، تمام fragment ها فعال آن نیز ذخیره می شوند. اگر این بررسی را انجام ندهید، ممکن است این اتفاق بیفتد:

Activity حالت ذخیره‌شده

همیشه به خاطر داشته باشید که وضعیت ذخیره شده چگونه بر fragment های شما تأثیر می گذارد. موارد گفته شده در بالا را به پروژه اضافه کرده و اجرا کنید و پس از راه اندازی برنامه، لیست سگ ها را مشاهده خواهید کرد:

لیست سگ ها

سخن پایانی آموزش اندروید پیشرفته

در این بخش از آموزش اندروید پیشرفته به تشریح فرگمنت Fragment در اندروید استادیو با کاتلین پرداخته شد. موارد مهمی برای کار کردن با فرگمنت ها در اندروید مطرح شد و یک پروژه نیمه آماده را برای درک بهتر کدها و روش اعمال آنها در پروژه، فراهم کردیم. موارد مطرح شده می تواند به عنوان اولین قدم در اجرای فرگمنت ها در اندروید برداشته شود و مطمئناً همه نکات در این آموزش گنجانده نشده است.

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

یک پاسخ

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

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