Fragment: bu nima, fragmentlar va Android-da FragmentManager

Muallif: IT Sectr Nashr etilgan: 2026-02-22 O'qish vaqti: 7 daq

Fragment — Android-da Activity ichiga joylashtiriladigan va FragmentManager orqali boshqariladigan qayta ishlatiladigan UI komponenti. Har bir fragment o'z hayot sikli, layout va holatiga ega. Fragment turli ekran o'lchamlariga moslashishni va kodni qayta ishlatishni osonlashtiradi. Batafsil ma'lumot uchun Google rasmiy qo'llanmasiga qarang.

Asosiy nuqtalar

  • Fragment — Activity ichida o'z hayot sikli va layoutiga ega UI komponenti
  • FragmentManager — fragment tranzaksiyalari va orqaga stekini boshqarish uchun sinf
  • FragmentTransaction — fragmentlarni qo'shish, almashtirish yoki o'chirish uchun atomik operatsiya
  • Jetpack Fragment — Android 1.6 (API 4)gacha orqaga moslik kutubxonasi
  • ViewModel — bitta Activity dagi fragmentlar o'rtasida ma'lumot almashish uchun umumiy komponent

Fragment nima?

Fragment — Activity ichida ekranning bir qismini ifodalovchi modulli Android foydalanuvchi interfeysi komponenti. Fragment o'z layoutini boshqarishi, hayot sikli hodisalarini qayta ishlashi va o'z holatini saqlashi mumkin. Modulligi tufayli bitta fragment turli Activity larda va turli qurilmalarda ishlatilishi mumkin.

Fragment API Android 3.0 (Honeycomb, API 11) 2011 yilda planshetlarni qo'llab-quvvatlash uchun paydo bo'ldi. Bungacha dasturchilar telefon va planshet uchun alohida Activity lar yaratishlari kerak edi. Fragment ekranni mustaqil bloklardan yig'ish imkonini berdi. 2019 yilda Google API 4 gacha orqaga moslik bilan Jetpack Fragment kutubxonasini chiqardi.

Google ma'lumotlariga ko'ra (2026), Google Play-dagi ilovalarning 80% i Fragment dan u yoki bu shaklda foydalanadi. Jetpack Fragment kutubxonasi Google Play Services orqali 10 milliard martadan ko'proq yuklab olingan. Fragment Jetpack Compose davrida ham Android arxitekturasining asosiy komponenti bo'lib qolmoqda.

Fragment hayot sikli

Fragment hayot sikli Activity nikiga qaraganda murakkabroq, chunki u xo'jayin Activity holatiga bog'liq. Fragment Activity bilan bir xil holatlardan o'tadi, lekin o'z callback larini qo'shadi: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment callbackActivity mosligiMaqsad
onAttachonCreate dan oldinFragment Activity ga bog'landi
onCreateonCreateUI bilan bog'liq bo'lmagan ma'lumotlarni ishga tushirish
onCreateViewonCreateInflater orqali layout yaratish
onViewCreatedonCreateView yaratilgandan so'ng UI elementlarini bog'lash
onDestroyViewonDestroyView ni o'chirish, UI resurslarini bo'shatish
onDetachonDestroyFragment Activity dan ajratildi

Fragment va Activity hayot sikli solishtirish

Fragment hayot sikli ning asosiy farqi — onCreate va onDestroy o'rtasida onCreateView va onDestroyView chaqirilishi. Fragment UI siz mavjud bo'lishi mumkin (agar onCreateView null qaytarsa). Activity qayta yaratilgandan so'ng FragmentManager fragmentlarni avtomatik tiklaydi.

FragmentManager va tranzaksiyalar

FragmentManager — Activity da fragmentlarni boshqarish uchun markaziy sinf. U fragmentlarni qo'shish, o'chirish, almashtirish, orqaga stekini boshqarish va holatni tiklash uchun javobgardir. FragmentManager supportFragmentManager (AndroidX) yoki fragmentManager (eski API) orqali olinadi.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Agar fragment hali qo'shilmagan bo'lsa — yaratamiz
        if (savedInstanceState == null) {
            val transaction = this.supportFragmentManager
                .beginTransaction()
            transaction.add(R.id.fragment_container, ListFragment())
            transaction.addToBackStack(null)
            transaction.commit()
        }
    }

    fun replaceFragment(fragment: Fragment) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.fragment_container, fragment)
            .addToBackStack(null)
            .commit()
    }
}

FragmentTransaction tranzaksiyalari — atomikdir. commit() bajarishni keyingi Looper sikluga rejalashtiradi. Darhol bajarish uchun commitNow() dan foydalaning. addToBackStack(null) tranzaksiyani orqaga stekiga qo'shadi — «Orqaga» tugmasi operatsiyani bekor qiladi.

Fragment hayot sikli metodlari

Kotlin misoli bilan Fragment hayot sikli ning asosiy metodlarini ko'rib chiqaylik. onCreateView layout yaratadi — Activity dan farqli ravishda metod View qaytarishi kerak. onViewCreated darhol keyin chaqiriladi, bu yerda elementlarni id bo'yicha topish xavfsiz. onDestroyView — view havolalarini tozalash uchun oxirgi imkoniyat.

kotlin
class DetailFragment : Fragment() {

    private var _binding: FragmentDetailBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentDetailBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.textTitle.setText("Tafsilotlar")
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

View Binding namunasi _binding/binding bilan onDestroyView dan keyin layout havolasi nolga tushirilishini kafolatlaydi. View yo'q qilingandan keyin binding ga murojaat qilish NullPointerException keltirib chiqaradi. Bu namuna Google tomonidan barcha fragmentlar uchun tavsiya etiladi.

Fragmentlar o'rtasida ma'lumot uzatish

Fragmentlar o'rtasida ma'lumot uzatish uchun Android bir necha mexanizmlarni taklif qiladi. Eng ishonchlisi — bitta Activity fragmentlari o'rtasida taqsimlanadigan umumiy ViewModel. Fragment Result API bir martalik hodisalar uchun mos keladi. Bundle argumentlari — fragment yaratilganda ma'lumotlar uchun.

kotlin
// Ikki fragment uchun umumiy ViewModel
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

    fun select(item: Item) { _selectedItem.setValue(item) }
}

// Fragment A: Fragment Result API orqali hodisa yuboradi
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B: hodisani qabul qiladi
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (Fragment 1.3.0 da qo'shilgan) eskirgan setTargetFragment/onActivityResult o'rnini egallaydi. API tip xavfsiz, Bundle ishlatadi va qabul qiluvchi haqida ma'lumot talab qilmaydi. Parent FragmentManager fragmentlar o'rtasida vositachi rolini o'ynaydi.

Fragment vs Activity: qachon nima tanlash

Fragment va Activity o'rtasidagi tanlov ilova arxitekturasiga bog'liq. Fragment adaptiv layoutlar (telefon + planshet), moslashtirilgan o'tish animatsiyalari va Jetpack Navigation dan foydalanish uchun majburiydir. Activity bir-ikki ekranli oddiy ilovalar uchun afzalroq.

MezonFragmentActivity
Yaratilish tezligiTezroq (yengil komponent)Sekinroq (tizim jarayoni)
Qayta foydalanishYuqori (bir fragment turli Activity larda)Past (har bir ekran — o'z Activity si)
O'tish animatsiyasiMoslashuvchan (FragmentTransaction)Cheklangan (overridePendingTransition)
Aylanishda saqlashAvtomatik (menejer tiklaydi)Qo'lda (onSaveInstanceState)
Deep LinksNavigation Component orqaliintent-filter orqali mahalliy qo'llab-quvvatlash

Jetpack Fragment va Jetpack Navigation

Fragment bilan ishlashning zamonaviy yondashuvi — FragmentManager ni qo'lda boshqarish o'rnini bosadigan Jetpack Navigation Component. Kutubxona NavGraph (XML navigatsiya grafi), NavHostFragment va tip xavfsiz ma'lumot uzatish uchun Safe Args ni taqdim etadi.

Jetpack Fragment kutubxonasi (androidx.fragment:fragment-ktx) FragmentResult API, DialogFragment, BottomSheetDialogFragment va Lifecycle-aware komponentlari bilan integratsiyani o'z ichiga oladi. 2026 yildan Google Fragment dan to'g'ridan-to'g'ri emas, faqat Jetpack Navigation orqali foydalanishni tavsiya qiladi.

xml

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:startDestination="@+id/listFragment">

    <fragment
        android:id="@+id/listFragment"
        android:name=".ListFragment"
        android:label="Ro'yxat">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:name=".DetailFragment"
        android:label="Tafsilotlar" />
</navigation>

Tez-tez beriladigan savollar

FragmentManager — bu nima?

FragmentManager — fragment tranzaksiyalarini boshqaradigan sinf. U Activity konteyneriga fragmentlarni qo'shadi, o'chiradi, almashtiradi. FragmentManager Activity qayta yaratilganda fragmentlar holatini tiklaydi va orqaga stekini boshqaradi.

Fragment Activity dan nima bilan farq qiladi?

Fragment — Activity ichidagi UI qismi, mustaqil mavjud bo'lolmaydi. Fragment ekran aylanishida Activity qayta yaratilishidan omon qoladi. Activity — o'z Lifecycle iga ega to'liq ekran, Fragment Activity Lifecycle iga bog'liq.

Qachon Fragment ni Activity o'rniga ishlatish kerak?

Fragment — ekran bir necha mustaqil bloklardan iborat bo'lganda (tablar, master-detail, planshetga moslashish). Activity — ekranda takrorlanuvchi bloklar bo'lmaganda. Google Single Activity + ko'p Fragment tavsiya qiladi.

Fragmentlar o'rtasida ma'lumotni qanday uzatish mumkin?

Uch usul: ota Activity orqali (umumiy ViewModel), Fragment Result API (setFragmentResult) orqali, Fragment yaratilganda Bundle argumentlari orqali. ViewModel — afzal usul, chunki ma'lumotlar qayta yaratishda saqlanadi.

Fragment Transaction nima?

Fragment Transaction — fragmentlar to'plamini o'zgartirish uchun atomik operatsiya. FragmentManager.beginTransaction() tranzaksiyani ochadi, unda add, remove, replace, hide, show chaqirish mumkin. Har bir tranzaksiya commit() yoki commitNow() bilan tugaydi.

Xulosa

  • Fragment — Activity ichida o'z hayot sikli, layouti va holati bilan qayta ishlatiladigan UI komponenti
  • FragmentManager fragment tranzaksiyalarini boshqaradi va Activity qayta yaratilganda ularning holatini tiklaydi
  • FragmentTransaction — fragmentlarni qo'shish, almashtirish, o'chirish va yashirish uchun atomik operatsiya
  • Fragment hayot sikli onAttach dan onDetach gacha oltita callback, qo'shimcha onCreateView nuqtasi bilan
  • ViewModel — bitta Activity dagi fragmentlar o'rtasida ma'lumot almashish uchun tavsiya etilgan usul
  • Fragment Result API fragmentlar o'rtasida bir martalik hodisalarning tip xavfsiz uzatilishini ta'minlaydi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing