Fragment — Android-də Activity daxilinə yerləşdirilən və FragmentManager vasitəsilə idarə olunan təkrar istifadə olunan UI komponentidir. Hər fraqmentin öz həyat dövrü, layout və vəziyyəti var. Fragment müxtəlif ekran ölçülərinə uyğunlaşmağı və kodun təkrar istifadəsini asanlaşdırır. Ətraflı məlumat üçün Google-ın rəsmi təlimatına baxın.
Əsas məqamlar
Fragment — Activity daxilində ekranın bir hissəsini təmsil edən modul Android istifadəçi interfeysi komponentidir. Fragment öz layoutunu idarə edə, həyat dövrü hadisələrini emal edə və vəziyyətini saxlaya bilər. Modulluğu sayəsində bir fraqment müxtəlif Activity-lərdə və müxtəlif cihazlarda istifadə oluna bilər.
Fragment API Android 3.0 (Honeycomb, API 11) 2011-ci ildə planşetləri dəstəkləmək üçün ortaya çıxdı. Bundan əvvəl tərtibatçılar telefon və planşet üçün ayrıca Activity-lər yaratmalı idilər. Fragment ekranı müstəqil bloklardan yığmağa imkan verdi. 2019-cu ildə Google API 4-ə qədər geriyə uyğunluqla Jetpack Fragment kitabxanasını buraxdı.
Google məlumatlarına görə (2026), Google Play-dəki proqramların 80%-i Fragment-dən bu və ya digər formada istifadə edir. Jetpack Fragment kitabxanası Google Play Services vasitəsilə 10 milyard dəfədən çox yüklənib. Fragment Jetpack Compose dövründə belə Android arxitekturasının əsas komponenti olaraq qalır.
Fragment-in həyat dövrü Activity-dən daha mürəkkəbdir, çünki o, ev sahibi Activity-nin vəziyyətindən asılıdır. Fragment Activity ilə eyni vəziyyətlərdən keçir, lakin öz callback-lərini əlavə edir: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.
| Fragment callback | Activity uyğunluğu | Məqsəd |
|---|---|---|
| onAttach | onCreate-dən əvvəl | Fragment Activity-yə bağlandı |
| onCreate | onCreate | UI ilə əlaqəli olmayan məlumatların inisiallaşdırılması |
| onCreateView | onCreate | Inflater vasitəsilə layout yaradılması |
| onViewCreated | onCreate | View yaradıldıqdan sonra UI elementlərinin bağlanması |
| onDestroyView | onDestroy | View silinməsi, UI resurslarının azad edilməsi |
| onDetach | onDestroy | Fragment Activity-dən ayrıldı |
Fragment həyat dövrü-nün əsas fərqi — onCreate və onDestroy arasında onCreateView və onDestroyView çağırışlarıdır. Fragment UI olmadan mövcud ola bilər (əgər onCreateView null qaytarırsa). Activity yenidən yaradıldıqdan sonra FragmentManager fraqmentləri avtomatik bərpa edir.
FragmentManager — Activity-də fraqmentləri idarə etmək üçün mərkəzi sinif. O, fraqmentlərin əlavə edilməsi, silinməsi, dəyişdirilməsi, geri yığınının idarə edilməsi və vəziyyətin bərpasına cavabdehdir. FragmentManager supportFragmentManager (AndroidX) və ya fragmentManager (köhnə API) vasitəsilə əldə edilir.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Əgər fraqment hələ əlavə edilməyibsə — yaradırıq
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 əməliyyatları — atomikdir. commit() icranı növbəti Looper dövrünə planlaşdırır. Dərhal icra üçün commitNow() istifadə edin. addToBackStack(null) əməliyyatı geri yığınına əlavə edir — «Geri» düyməsi əməliyyatı ləğv edəcək.
Kotlin nümunəsi ilə Fragment həyat dövrü-nün əsas metodlarını nəzərdən keçirək. onCreateView layout yaradır — Activity-dən fərqli olaraq metod View qaytarmalıdır. onViewCreated dərhal sonra çağırılır, burada elementləri id ilə tapmaq təhlükəsizdir. onDestroyView — view istinadlarını təmizləmək üçün son fürsət.
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("Təfərrüatlar")
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}View Binding nümunəsi _binding/binding ilə onDestroyView-dən sonra layout istinadının sıfırlanmasını təmin edir. View məhv edildikdən sonra binding-ə müraciət NullPointerException yaradacaq. Bu nümunə Google tərəfindən bütün fraqmentlər üçün tövsiyə olunur.
Fraqmentlər arasında məlumat ötürülməsi üçün Android bir neçə mexanizm təklif edir. Ən etibarlısı — bir Activity-nin fraqmentləri arasında paylaşılan ümumi ViewModel-dir. Fragment Result API birdəfəlik hadisələr üçün uyğundur. Bundle arqumentləri — fraqment yaradılarkən məlumatlar üçün.
// İki fraqment üçün ümumi 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 vasitəsilə hadisə göndərir
setFragmentResult("request_key", bundleOf("key" to "value"))
// Fragment B: hadisəni qəbul edir
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
val value = bundle.getString("key")
}Fragment Result API (Fragment 1.3.0-da əlavə edilib) köhnəlmiş setTargetFragment/onActivityResult-u əvəz edir. API tip təhlükəsizdir, Bundle istifadə edir və alıcı haqqında məlumat tələb etmir. Parent FragmentManager fraqmentlər arasında vasitəçi rolunu oynayır.
Fragment və Activity arasında seçim proqram arxitekturasından asılıdır. Fragment adaptiv layoutlar (telefon + planşet), fərdi keçid animasiyaları və Jetpack Navigation istifadəsi üçün məcburidir. Activity bir-iki ekranlı sadə proqramlar üçün daha üstündür.
| Meyar | Fragment | Activity |
|---|---|---|
| Yaradılma sürəti | Daha sürətli (yüngül komponent) | Daha yavaş (sistem prosesi) |
| Təkrar istifadə | Yüksək (bir fraqment müxtəlif Activity-lərdə) | Aşağı (hər ekran — öz Activity-si) |
| Keçid animasiyası | Çevik (FragmentTransaction) | Məhdud (overridePendingTransition) |
| Dönmədə qorunma | Avtomatik (menecer bərpa edir) | Əl ilə (onSaveInstanceState) |
| Deep Links | Navigation Component vasitəsilə | intent-filter ilə yerli dəstək |
Fragment ilə işin müasir yanaşması — FragmentManager-in əl ilə idarə edilməsini əvəz edən Jetpack Navigation Component-dir. Kitabxana NavGraph (XML naviqasiya qrafı), NavHostFragment və tip təhlükəsiz məlumat ötürülməsi üçün Safe Args təqdim edir.
Jetpack Fragment kitabxanası (androidx.fragment:fragment-ktx) FragmentResult API, DialogFragment, BottomSheetDialogFragment və Lifecycle-aware komponentləri ilə inteqrasiyanı əhatə edir. 2026-cı ildən Google Fragment-dən birbaşa deyil, yalnız Jetpack Navigation vasitəsilə istifadə etməyi tövsiyə edir.
<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="Siyahı">
<action
android:id="@+id/action_list_to_detail"
app:destination="@+id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name=".DetailFragment"
android:label="Təfərrüatlar" />
</navigation>Tez-tez verilən suallar
FragmentManager — fraqment əməliyyatlarını idarə edən sinif. O, Activity konteynerinə fraqmentləri əlavə edir, silir, dəyişdirir. FragmentManager Activity yenidən yaradıldıqda fraqmentlərin vəziyyətini bərpa edir və geri yığınını idarə edir.
Fragment — Activity daxilində UI hissəsi, müstəqil mövcud ola bilməz. Fragment ekran dönməsində Activity-nin yenidən yaradılmasından sağ çıxır. Activity — öz Lifecycle-i olan tam ekran, Fragment Activity-nin Lifecycle-indən asılıdır.
Fragment — ekran bir neçə müstəqil blokdan ibarət olduqda (tablar, master-detail, planşetə uyğunlaşma). Activity — ekranda təkrarlanan bloklar olmadıqda. Google Single Activity + çoxlu Fragment tövsiyə edir.
Üç üsul: valideyn Activity vasitəsilə (ümumi ViewModel), Fragment Result API (setFragmentResult) vasitəsilə, Fragment yaradılarkən Bundle arqumentləri ilə. ViewModel — üstünlük verilən üsul, çünki məlumatlar yenidən yaratmada qorunur.
Fragment Transaction — fraqmentlər dəstinin dəyişdirilməsi üçün atomik əməliyyat. FragmentManager.beginTransaction() əməliyyatı açır, burada add, remove, replace, hide, show çağırmaq olar. Hər əməliyyat commit() və ya commitNow() ilə bitir.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun