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 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 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 callback | Activity mosligi | Maqsad |
|---|---|---|
| onAttach | onCreate dan oldin | Fragment Activity ga bog'landi |
| onCreate | onCreate | UI bilan bog'liq bo'lmagan ma'lumotlarni ishga tushirish |
| onCreateView | onCreate | Inflater orqali layout yaratish |
| onViewCreated | onCreate | View yaratilgandan so'ng UI elementlarini bog'lash |
| onDestroyView | onDestroy | View ni o'chirish, UI resurslarini bo'shatish |
| onDetach | onDestroy | Fragment Activity dan ajratildi |
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 — 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.
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.
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.
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 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.
// 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 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.
| Mezon | Fragment | Activity |
|---|---|---|
| Yaratilish tezligi | Tezroq (yengil komponent) | Sekinroq (tizim jarayoni) |
| Qayta foydalanish | Yuqori (bir fragment turli Activity larda) | Past (har bir ekran — o'z Activity si) |
| O'tish animatsiyasi | Moslashuvchan (FragmentTransaction) | Cheklangan (overridePendingTransition) |
| Aylanishda saqlash | Avtomatik (menejer tiklaydi) | Qo'lda (onSaveInstanceState) |
| Deep Links | Navigation Component orqali | intent-filter orqali mahalliy qo'llab-quvvatlash |
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.
<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 — 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 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.
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.
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 — 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
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.