Fragment: nedir, Android'de fragmentler ve FragmentManager

Yazar: IT Sectr Yayınlanma: 2026-02-22 Okuma süresi: 7 dk

Fragment, Android'de bir Activity içine gömülen ve FragmentManager aracılığıyla yönetilen yeniden kullanılabilir bir UI bileşenidir. Her fragmentin kendi yaşam döngüsü, layout ve durumu vardır. Fragment, farklı ekran boyutlarına uyum sağlamayı ve kodun yeniden kullanımını basitleştirir. Daha fazlasını Google'ın resmi kılavuzunda okuyun.

Önemli Noktalar

  • Fragment — bir Activity içinde kendi yaşam döngüsü ve layout'una sahip UI bileşeni
  • FragmentManager — fragment işlemlerini ve geri yığınını yönetmek için bir sınıf
  • FragmentTransaction — fragment ekleme, değiştirme veya kaldırma için atomik bir işlem
  • Jetpack Fragment — Android 1.6'ya (API 4) kadar geriye dönük uyumluluk için bir kütüphane
  • ViewModel — bir Activity içindeki fragmentler arasında veri alışverişi için paylaşılan bileşen

Fragment Nedir?

Fragment, bir Activity içinde ekranın bir bölümünü temsil eden modüler bir Android kullanıcı arayüzü bileşenidir. Fragment, kendi layout'unu yönetebilir, yaşam döngüsü olaylarını işleyebilir ve durumunu kaydedebilir. Modülerlik sayesinde, bir fragment farklı Activity'lerde ve farklı cihazlarda kullanılabilir.

Fragment API, tabletleri desteklemek için 2011 yılında Android 3.0'da (Honeycomb, API 11) ortaya çıktı. Bundan önce geliştiricilerin telefon ve tablet için ayrı Activity'ler oluşturması gerekiyordu. Fragment, bağımsız bloklardan bir ekran oluşturmayı mümkün kıldı. 2019'da Google, API 4'e kadar geriye dönük uyumlulukla Jetpack Fragment kütüphanesini yayınladı.

Google'a (2026) göre, Google Play'deki uygulamaların %80'i bir şekilde Fragment kullanıyor. Jetpack Fragment kütüphanesi, Google Play Services aracılığıyla 10 milyar kez indirildi. Fragment, Jetpack Compose çağında bile Android mimarisinin temel bir bileşeni olmaya devam ediyor.

Fragment Yaşam Döngüsü

Fragment'in yaşam döngüsü, Activity'ninkinden daha karmaşıktır çünkü ana Activity'nin durumuna bağlıdır. Fragment, Activity ile aynı durumlardan geçer ancak kendi callback'lerini ekler: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment CallbackActivity KarşılığıAmaç
onAttachonCreate'ten önceFragment Activity'ye eklendi
onCreateonCreateUI dışı verilerin başlatılması
onCreateViewonCreateInflater aracılığıyla layout oluşturma
onViewCreatedonCreateView oluşturulduktan sonra UI öğelerini bağlama
onDestroyViewonDestroyView'i kaldırma, UI kaynaklarını serbest bırakma
onDetachonDestroyFragment Activity'den ayrıldı

Fragment ve Activity Yaşam Döngüsü Karşılaştırması

Fragment yaşam döngüsünün temel farkı, onCreate ve onDestroy arasında onCreateView ve onDestroyView'in çağrılmasıdır. Fragment, UI olmadan var olabilir (onCreateView null döndürürse). Activity yeniden oluşturulduktan sonra FragmentManager, fragmentleri otomatik olarak geri yükler.

FragmentManager ve İşlemler

FragmentManager, bir Activity'de fragmentleri yönetmek için merkezi sınıftır. Fragment ekleme, kaldırma, değiştirme, geri yığınını yönetme ve durumu geri yüklemeden sorumludur. FragmentManager'a supportFragmentManager (AndroidX) veya fragmentManager (eski API) aracılığıyla erişilebilir.

kotlin
class MainActivity : AppCompatActivity() {

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

        // Fragment henüz eklenmedi — oluşturuluyor
        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 işlemleri atomiktir. commit() yürütmeyi bir sonraki Looper döngüsüne planlar. Anında yürütme için commitNow() kullanın. addToBackStack(null) işlemi geri yığınına ekler — geri butonu işlemi geri alır.

Fragment Yaşam Döngüsü Metotları

Fragment yaşam döngüsünün temel metotlarını bir Kotlin örneğiyle inceleyelim. onCreateView bir layout oluşturur — Activity'nin aksine, metot bir View döndürmelidir. onViewCreated hemen ardından çağrılır, burada id'ye göre öğe bulmak güvenlidir. onDestroyView, view referanslarını temizlemek için son andır.

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("Detaylar")
    }

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

View Binding deseni (_binding/binding ile), onDestroyView'den sonra layout referansının sıfırlanmasını sağlar. View yok edildikten sonra binding'e erişmek NullPointerException'a neden olur. Bu desen Google tarafından tüm fragmentler için önerilir.

Fragmentler Arasında Veri Aktarımı

Fragmentler arasında veri aktarımı için Android birkaç mekanizma sunar. En güveniliri, bir Activity'nin fragmentleri arasında paylaşılan bir ViewModel'dir. Fragment Result API, tek seferlik olaylar için uygundur. Bundle argümanları, fragment oluştururken veri içindir.

kotlin
// İki fragment için paylaşılan 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 aracılığıyla olay gönderir
setFragmentResult("request_key", bundleOf("key" to "value"))

// Fragment B: olayı alır
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
    val value = bundle.getString("key")
}

Fragment Result API (Fragment 1.3.0'da eklendi), kullanımdan kaldırılan setTargetFragment/onActivityResult'ın yerini alır. API tip güvenlidir, Bundle kullanır ve alıcının bilinmesini gerektirmez. Parent FragmentManager, fragmentler arasında aracı görevi görür.

Fragment vs Activity: Ne Zaman Ne Seçilmeli

Fragment ve Activity arasındaki seçim, uygulama mimarisine bağlıdır. Fragment, uyarlanabilir düzenler (telefon + tablet), özel geçiş animasyonları ve Jetpack Navigation kullanımı için zorunludur. Activity, bir veya iki ekranlı basit uygulamalar için tercih edilir.

KriterFragmentActivity
Oluşturma hızıDaha hızlı (hafif bileşen)Daha yavaş (sistem işlemi)
Yeniden kullanılabilirlikYüksek (bir fragment farklı Activity'lerde)Düşük (her ekranın kendi Activity'si)
Geçiş animasyonuEsnek (FragmentTransaction)Sınırlı (overridePendingTransition)
Döndürmede korumaOtomatik (yönetici geri yükler)Manuel (onSaveInstanceState)
Deep LinksNavigation Component aracılığıylaintent-filter ile yerel destek

Jetpack Fragment ve Jetpack Navigation

Fragment ile çalışmanın modern yaklaşımı, manuel FragmentManager yönetiminin yerini alan Jetpack Navigation Component'tir. Kütüphane, NavGraph (XML navigasyon grafiği), NavHostFragment ve tip güvenli veri aktarımı için Safe Args sağlar.

Jetpack Fragment kütüphanesi (androidx.fragment:fragment-ktx), FragmentResult API, DialogFragment, BottomSheetDialogFragment ve Lifecycle-aware bileşenlerle entegrasyon içerir. 2026'dan itibaren Google, Fragment'in doğrudan değil yalnızca Jetpack Navigation aracılığıyla kullanılmasını önerir.

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="Liste">
        <action
            android:id="@+id/action_list_to_detail"
            app:destination="@+id/detailFragment" />
    </fragment>

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

Sıkça Sorulan Sorular

FragmentManager nedir?

FragmentManager, fragment işlemlerini yöneten bir sınıftır. Bir Activity kabında fragmentleri ekler, kaldırır ve değiştirir. FragmentManager, Activity yeniden oluşturulduğunda fragment durumunu geri yükler ve geri yığınını yönetir.

Fragment, Activity'den nasıl farklıdır?

Fragment, bir Activity içindeki UI'nın bir parçasıdır, bağımsız olarak var olamaz. Fragment, ekran döndürme sırasında Activity'nin yeniden oluşturulmasından kurtulur. Activity, kendi Lifecycle'ına sahip tam bir ekrandır, Fragment, Activity'nin Lifecycle'ına bağlıdır.

Activity yerine Fragment ne zaman kullanılmalı?

Fragment — ekran birden çok bağımsız bloktan oluştuğunda (sekmeler, ana-ayrıntı, tablet uyarlaması). Activity — ekranda tekrarlanabilir blok olmadığında. Google, Single Activity + çoklu Fragment önerir.

Fragmentler arasında veri nasıl aktarılır?

Üç yol: üst Activity aracılığıyla (paylaşılan bir ViewModel), Fragment Result API (setFragmentResult) aracılığıyla, Fragment oluştururken Bundle argümanları aracılığıyla. ViewModel tercih edilen yöntemdir çünkü veriler yeniden oluşturma sırasında korunur.

Fragment Transaction nedir?

Fragment Transaction, fragment kümesini değiştiren atomik bir işlemdir. FragmentManager.beginTransaction(), add, remove, replace, hide, show çağrılabilecek bir işlem açar. Her işlem commit() veya commitNow() ile biter.

Özet

  • Fragment, bir Activity içinde kendi yaşam döngüsü, layout ve durumuna sahip yeniden kullanılabilir UI bileşenidir
  • FragmentManager fragment işlemlerini yönetir ve Activity yeniden oluşturulduğunda durumlarını geri yükler
  • FragmentTransaction fragment ekleme, değiştirme, kaldırma ve gizleme için atomik bir işlemdir
  • Fragment yaşam döngüsü, onAttach'ten onDetach'a kadar altı callback ve ek onCreateView noktası içerir
  • ViewModel, bir Activity içindeki fragmentler arasında veri alışverişi için önerilen yöntemdir
  • Fragment Result API fragmentler arasında tip güvenli tek seferlik olay aktarımı sağlar

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun