Fragment: wat is het, fragmenten en FragmentManager in Android

Auteur: IT Sectr Gepubliceerd: 2026-02-22 Leestijd: 7 min

Fragment — een herbruikbare UI-component in Android die in Activity wordt ingebed en via FragmentManager wordt beheerd. Elk fragment heeft een eigen levenscyclus, layout en toestand. Fragment vergemakkelijkt aanpassing aan verschillende schermformaten en hergebruik van code. Lees meer in de officiële Google-handleiding.

Belangrijkste punten

  • Fragment — UI-component binnen Activity met eigen levenscyclus en layout
  • FragmentManager — klasse voor het beheren van fragmenttransacties en back stack
  • FragmentTransaction — atomaire bewerking voor toevoegen, vervangen of verwijderen van fragmenten
  • Jetpack Fragment — bibliotheek voor achterwaartse compatibiliteit tot Android 1.6 (API 4)
  • ViewModel — gedeelde component voor gegevensuitwisseling tussen fragmenten in dezelfde Activity

Wat is Fragment?

Fragment — een modulaire Android-gebruikersinterfacecomponent die een deel van het scherm binnen Activity vertegenwoordigt. Fragment kan zijn eigen layout beheren, levenscyclusgebeurtenissen verwerken en zijn toestand opslaan. Dankzij modulariteit kan één fragment in verschillende Activities en op verschillende apparaten worden gebruikt.

Fragment API verscheen in Android 3.0 (Honeycomb, API 11) in 2011 voor ondersteuning van tablets. Daarvoor moesten ontwikkelaars aparte Activities maken voor telefoon en tablet. Fragment maakte het mogelijk het scherm uit onafhankelijke blokken samen te stellen. In 2019 bracht Google de Jetpack Fragment-bibliotheek uit met achterwaartse compatibiliteit tot API 4.

Volgens Google-gegevens (2026) gebruikt 80% van de apps in Google Play Fragment in een of andere vorm. De Jetpack Fragment-bibliotheek is meer dan 10 miljard keer gedownload via Google Play Services. Fragment blijft een belangrijk onderdeel van de Android-architectuur, zelfs in het tijdperk van Jetpack Compose.

Levenscyclus van Fragment

De levenscyclus van Fragment is complexer dan die van Activity, omdat deze afhangt van de toestand van de gastheer-Activity. Fragment doorloopt dezelfde toestanden als Activity, maar voegt eigen callbacks toe: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.

Fragment callbackOvereenkomst ActivityDoel
onAttachvóór onCreateFragment gekoppeld aan Activity
onCreateonCreateInitialisatie van niet-UI-gerelateerde gegevens
onCreateViewonCreateLayout maken via inflater
onViewCreatedonCreateUI-elementen koppelen na het maken van view
onDestroyViewonDestroyView verwijderen, UI-bronnen vrijgeven
onDetachonDestroyFragment losgekoppeld van Activity

Vergelijking van levenscyclus van Fragment en Activity

Het belangrijkste verschil van de levenscyclus van Fragment — het aanroepen van onCreateView en onDestroyView tussen onCreate en onDestroy. Fragment kan zonder UI bestaan (als onCreateView null retourneert). Na het opnieuw aanmaken van Activity herstelt FragmentManager de fragmenten automatisch.

FragmentManager en transacties

FragmentManager — de centrale klasse voor het beheren van fragmenten in Activity. Het is verantwoordelijk voor het toevoegen, verwijderen, vervangen van fragmenten, beheer van back stack en herstel van toestand. FragmentManager is toegankelijk via supportFragmentManager (AndroidX) of fragmentManager (oude API).

kotlin
class MainActivity : AppCompatActivity() {

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

        // Als het fragment nog niet is toegevoegd — maken we het
        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()
    }
}

Transacties van FragmentTransaction — zijn atomair. commit() plant uitvoering voor de volgende Looper-cyclus. Gebruik commitNow() voor onmiddellijke uitvoering. addToBackStack(null) voegt de transactie toe aan de terug-stack — de «Terug»-knop zal de bewerking ongedaan maken.

Methoden van de levenscyclus van Fragment

Laten we de belangrijkste methoden van de levenscyclus van Fragment bekijken met een voorbeeld in Kotlin. onCreateView maakt de layout — in tegenstelling tot Activity moet de methode View retourneren. onViewCreated wordt direct daarna aangeroepen, hier is het veilig om elementen op id te vinden. onDestroyView — het laatste moment om verwijzingen naar view op te schonen.

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

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

Het View Binding-patroon met _binding/binding garandeert dat na onDestroyView de verwijzing naar layout wordt gereset. Toegang tot binding na vernietiging van de view veroorzaakt NullPointerException. Dit patroon wordt door Google aanbevolen voor alle fragmenten.

Gegevens overdragen tussen fragmenten

Voor gegevensoverdracht tussen fragmenten biedt Android verschillende mechanismen. De meest betrouwbare — gedeelde ViewModel, gedeeld tussen fragmenten van dezelfde Activity. Fragment Result API is geschikt voor eenmalige gebeurtenissen. Bundle-argumenten — voor gegevens bij het maken van een fragment.

kotlin
// Gedeelde ViewModel voor twee fragmenten
class SharedViewModel : ViewModel() {
    private val _selectedItem = MutableLiveData<Item>()
    val selectedItem: LiveData<Item> = _selectedItem

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

// Fragment A: stuurt gebeurtenis via Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))

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

Fragment Result API (toegevoegd in Fragment 1.3.0) vervangt verouderde setTargetFragment/onActivityResult. De API is typeveilig, gebruikt Bundle en vereist geen kennis van de ontvanger. Parent FragmentManager fungeert als tussenpersoon tussen fragmenten.

Fragment vs Activity: wanneer wat te kiezen

De keuze tussen Fragment en Activity hangt af van de applicatiearchitectuur. Fragment is verplicht voor adaptieve layouts (telefoon + tablet), voor aangepaste overgangsanimaties en voor gebruik van Jetpack Navigation. Activity heeft de voorkeur voor eenvoudige apps met één of twee schermen.

CriteriumFragmentActivity
Snelheid van aanmakenSneller (lichte component)Langzamer (systeemproces)
HergebruikHoog (één fragment in verschillende Activities)Laag (elk scherm — eigen Activity)
OvergangsanimatieFlexibel (FragmentTransaction)Beperkt (overridePendingTransition)
Opslaan bij rotatieAutomatisch (manager herstelt)Handmatig (onSaveInstanceState)
Deep LinksVia Navigation ComponentNative ondersteuning via intent-filter

Jetpack Fragment en Jetpack Navigation

De moderne aanpak voor werken met Fragment — Jetpack Navigation Component, die handmatig beheer van FragmentManager vervangt. De bibliotheek biedt NavGraph (XML-navigatiegraaf), NavHostFragment en Safe Args voor typeveilige gegevensoverdracht.

Jetpack Fragment-bibliotheek (androidx.fragment:fragment-ktx) bevat FragmentResult API, DialogFragment, BottomSheetDialogFragment en integratie met Lifecycle-aware componenten. Sinds 2026 raadt Google aan om Fragment alleen via Jetpack Navigation te gebruiken, niet direct.

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

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

Veelgestelde vragen

FragmentManager — wat is dat?

FragmentManager — klasse die fragmenttransacties beheert. Het voegt, verwijdert, vervangt fragmenten in de Activity-container. FragmentManager herstelt de toestand van fragmenten bij het opnieuw aanmaken van Activity en beheert de back stack.

Waarin verschilt Fragment van Activity?

Fragment — deel van UI binnen Activity, kan niet zelfstandig bestaan. Fragment overleeft het opnieuw aanmaken van Activity bij schermrotatie. Activity — volledig scherm met eigen Lifecycle, Fragment is afhankelijk van de Lifecycle van Activity.

Wanneer Fragment gebruiken in plaats van Activity?

Fragment — wanneer het scherm uit meerdere onafhankelijke blokken bestaat (tabbladen, master-detail, aanpassing voor tablet). Activity — wanneer het scherm geen herhalende blokken heeft. Google raadt Single Activity + meerdere Fragment aan.

Hoe gegevens overdragen tussen Fragmenten?

Drie manieren: via ouder-Activity (gedeelde ViewModel), via Fragment Result API (setFragmentResult), via Bundle-argumenten bij het maken van Fragment. ViewModel — de voorkeursmethode, omdat gegevens behouden blijven bij opnieuw aanmaken.

Wat is Fragment Transaction?

Fragment Transaction — atomaire bewerking voor het wijzigen van de set fragmenten. FragmentManager.beginTransaction() opent een transactie waarin add, remove, replace, hide, show kunnen worden aangeroepen. Elke transactie eindigt met commit() of commitNow().

Samenvatting

  • Fragment — herbruikbare UI-component binnen Activity met eigen levenscyclus, layout en toestand
  • FragmentManager beheert fragmenttransacties en herstelt hun toestand bij het opnieuw aanmaken van Activity
  • FragmentTransaction — atomaire bewerking voor toevoegen, vervangen, verwijderen en verbergen van fragmenten
  • Levenscyclus van Fragment omvat zes callbacks, van onAttach tot onDetach, met een extra punt onCreateView
  • ViewModel — aanbevolen manier voor gegevensuitwisseling tussen fragmenten in dezelfde Activity
  • Fragment Result API zorgt voor typeveilige overdracht van eenmalige gebeurtenissen tussen fragmenten

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook