Fragment ist eine wiederverwendbare UI-Komponente in Android, die in eine Activity eingebettet und über FragmentManager verwaltet wird. Jedes Fragment hat seinen eigenen Lebenszyklus, sein eigenes Layout und seinen eigenen Zustand. Fragment vereinfacht die Anpassung an verschiedene Bildschirmgrößen und die Wiederverwendung von Code. Lesen Sie mehr im offiziellen Google-Leitfaden.
Wichtige Punkte
Fragment ist eine modulare Android-Benutzeroberflächenkomponente, die einen Teil des Bildschirms innerhalb einer Activity darstellt. Fragment kann sein eigenes Layout verwalten, Lebenszyklus-Ereignisse behandeln und seinen Zustand speichern. Dank der Modularität kann ein Fragment in verschiedenen Activities und auf verschiedenen Geräten verwendet werden.
Die Fragment API erschien in Android 3.0 (Honeycomb, API 11) im Jahr 2011 zur Unterstützung von Tablets. Davor mussten Entwickler separate Activities für Telefon und Tablet erstellen. Fragment ermöglichte es, einen Bildschirm aus unabhängigen Blöcken zusammenzusetzen. 2019 veröffentlichte Google die Jetpack Fragment Bibliothek mit Abwärtskompatibilität bis API 4.
Laut Google (2026) verwenden 80% der Apps im Google Play Store Fragment in irgendeiner Form. Die Jetpack Fragment Bibliothek wurde über 10 Milliarden Mal über Google Play Services heruntergeladen. Fragment bleibt auch im Zeitalter von Jetpack Compose eine Schlüsselkomponente der Android-Architektur.
Der Lebenszyklus von Fragment ist komplexer als der von Activity, da er vom Zustand der Host-Activity abhängt. Fragment durchläuft dieselben Zustände wie Activity, fügt jedoch eigene Callbacks hinzu: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach.
| Fragment-Callback | Activity-Äquivalent | Zweck |
|---|---|---|
| onAttach | vor onCreate | Fragment an Activity gebunden |
| onCreate | onCreate | Initialisierung von Nicht-UI-Daten |
| onCreateView | onCreate | Layout-Erstellung über inflater |
| onViewCreated | onCreate | Bindung von UI-Elementen nach View-Erstellung |
| onDestroyView | onDestroy | View-Entfernung, Freigabe von UI-Ressourcen |
| onDetach | onDestroy | Fragment von Activity getrennt |
Der Hauptunterschied des Fragment-Lebenszyklus ist der Aufruf von onCreateView und onDestroyView zwischen onCreate und onDestroy. Fragment kann ohne UI existieren (wenn onCreateView null zurückgibt). Nach der Neuerstellung der Activity stellt FragmentManager die Fragmente automatisch wieder her.
FragmentManager ist die zentrale Klasse zur Verwaltung von Fragmenten in einer Activity. Er kümmert sich um das Hinzufügen, Entfernen, Ersetzen von Fragmenten, die Verwaltung des Back-Stacks und die Wiederherstellung des Zustands. FragmentManager ist über supportFragmentManager (AndroidX) oder fragmentManager (alte API) verfügbar.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Fragment noch nicht hinzugefügt — erstelle
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-Transaktionen sind atomar. commit() plant die Ausführung für den nächsten Looper-Zyklus. Für sofortige Ausführung verwenden Sie commitNow(). addToBackStack(null) fügt die Transaktion zum Back-Stack hinzu — die Zurück-Taste macht die Operation rückgängig.
Betrachten wir die wichtigsten Methoden des Fragment-Lebenszyklus mit einem Kotlin-Beispiel. onCreateView erstellt ein Layout — anders als Activity muss die Methode ein View zurückgeben. onViewCreated wird unmittelbar danach aufgerufen, hier ist es sicher, Elemente per ID zu finden. onDestroyView ist der letzte Moment, um View-Referenzen zu bereinigen.
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
}
}Das View Binding-Muster mit _binding/binding stellt sicher, dass nach onDestroyView die Layout-Referenz auf null gesetzt wird. Der Zugriff auf binding nach der Zerstörung der View führt zu einer NullPointerException. Dieses Muster wird von Google für alle Fragmente empfohlen.
Für die Datenübertragung zwischen Fragmenten bietet Android mehrere Mechanismen. Der zuverlässigste ist ein gemeinsam genutztes ViewModel, das zwischen Fragmenten einer Activity geteilt wird. Fragment Result API eignet sich für einmalige Ereignisse. Bundle-Argumente sind für Daten beim Erstellen eines Fragments.
// Geteiltes ViewModel für zwei Fragmente
class SharedViewModel : ViewModel() {
private val _selectedItem = MutableLiveData<Item>()
val selectedItem: LiveData<Item> = _selectedItem
fun select(item: Item) { _selectedItem.setValue(item) }
}
// Fragment A: sendet Ereignis über Fragment Result API
setFragmentResult("request_key", bundleOf("key" to "value"))
// Fragment B: empfängt Ereignis
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
val value = bundle.getString("key")
}Fragment Result API (hinzugefügt in Fragment 1.3.0) ersetzt die veralteten setTargetFragment/onActivityResult. Die API ist typsicher, verwendet Bundle und erfordert keine Kenntnis des Empfängers. Parent FragmentManager fungiert als Vermittler zwischen Fragmenten.
Die Wahl zwischen Fragment und Activity hängt von der Anwendungsarchitektur ab. Fragment ist obligatorisch für adaptive Layouts (Telefon + Tablet), für benutzerdefinierte Übergangsanimationen und für die Verwendung von Jetpack Navigation. Activity ist für einfache Apps mit ein bis zwei Bildschirmen vorzuziehen.
| Kriterium | Fragment | Activity |
|---|---|---|
| Erstellungsgeschwindigkeit | Schneller (leichte Komponente) | Langsamer (Systemprozess) |
| Wiederverwendbarkeit | Hoch (ein Fragment in verschiedenen Activities) | Niedrig (jeder Bildschirm hat eigene Activity) |
| Übergangsanimation | Flexibel (FragmentTransaction) | Eingeschränkt (overridePendingTransition) |
| Erhaltung bei Drehung | Automatisch (Manager stellt wieder her) | Manuell (onSaveInstanceState) |
| Deep Links | Über Navigation Component | Native Unterstützung über intent-filter |
Der moderne Ansatz für die Arbeit mit Fragment ist Jetpack Navigation Component, der die manuelle FragmentManager-Verwaltung ersetzt. Die Bibliothek bietet NavGraph (XML-Navigationsgraph), NavHostFragment und Safe Args für typsichere Datenübertragung.
Jetpack Fragment Bibliothek (androidx.fragment:fragment-ktx) enthält FragmentResult API, DialogFragment, BottomSheetDialogFragment und Integration mit Lifecycle-aware-Komponenten. Seit 2026 empfiehlt Google, Fragment nur über Jetpack Navigation zu verwenden, nicht direkt.
<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="Details" />
</navigation>Häufig gestellte Fragen
FragmentManager ist eine Klasse, die Fragment-Transaktionen verwaltet. Sie fügt, entfernt und ersetzt Fragmente in einem Activity-Container. FragmentManager stellt den Fragmentzustand bei der Neuerstellung der Activity wieder her und verwaltet den Back-Stack.
Fragment ist ein Teil der UI innerhalb einer Activity, kann nicht unabhängig existieren. Fragment überlebt die Neuerstellung der Activity bei Bildschirmdrehung. Activity ist ein vollständiger Bildschirm mit eigenem Lifecycle, Fragment hängt vom Lifecycle der Activity ab.
Fragment — wenn ein Bildschirm aus mehreren unabhängigen Blöcken besteht (Tabs, Master-Detail, Tablet-Anpassung). Activity — wenn ein Bildschirm keine wiederholbaren Blöcke hat. Google empfiehlt Single Activity + mehrere Fragmente.
Drei Wege: über die Parent-Activity (gemeinsames ViewModel), über Fragment Result API (setFragmentResult), über Bundle-Argumente beim Erstellen eines Fragments. ViewModel ist die bevorzugte Methode, da Daten bei der Neuerstellung erhalten bleiben.
Fragment Transaction ist eine atomare Operation, die den Fragmentsatz ändert. FragmentManager.beginTransaction() öffnet eine Transaktion, in der add, remove, replace, hide, show aufgerufen werden können. Jede Transaktion endet mit commit() oder commitNow().
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch