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 — 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.
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 callback | Overeenkomst Activity | Doel |
|---|---|---|
| onAttach | vóór onCreate | Fragment gekoppeld aan Activity |
| onCreate | onCreate | Initialisatie van niet-UI-gerelateerde gegevens |
| onCreateView | onCreate | Layout maken via inflater |
| onViewCreated | onCreate | UI-elementen koppelen na het maken van view |
| onDestroyView | onDestroy | View verwijderen, UI-bronnen vrijgeven |
| onDetach | onDestroy | Fragment losgekoppeld van 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 — 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).
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.
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.
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.
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.
// 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.
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.
| Criterium | Fragment | Activity |
|---|---|---|
| Snelheid van aanmaken | Sneller (lichte component) | Langzamer (systeemproces) |
| Hergebruik | Hoog (één fragment in verschillende Activities) | Laag (elk scherm — eigen Activity) |
| Overgangsanimatie | Flexibel (FragmentTransaction) | Beperkt (overridePendingTransition) |
| Opslaan bij rotatie | Automatisch (manager herstelt) | Handmatig (onSaveInstanceState) |
| Deep Links | Via Navigation Component | Native ondersteuning via intent-filter |
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.
<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 — 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.
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.
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.
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.
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
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.
Lees ook