Fragments
Erstellen Sie modulare Benutzeroberflächen mit Fragments. Lernen Sie den Fragment-Lebenszyklus, ViewBinding in Fragments, die Übergabe von Argumenten, die Verwaltung des Backstacks und die Kommunikation zwischen Fragmenten und Activities kennen.
Fragments ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 6 von 7. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 7 Lektionen.
Was sind Fragments?
Ein Fragment ist ein wiederverwendbares UI-Modul, das innerhalb einer Activity ausgeführt wird. Stellen Sie es sich als Unter-Activity mit eigenem Layout, eigenem Lebenszyklus und eigener Logik vor.
Warum Fragments verwenden?
- UI in mehreren Activities wiederverwenden
- Unterschiedliche Layouts für Smartphones und Tablets verwalten
- Abläufe über mehrere Bildschirme ohne mehrere Activities erstellen
- Natürlich mit der Navigation Component arbeiten
Fragment-Lebenszyklus
Fragments haben ihren eigenen Lebenszyklus, der parallel zum Lebenszyklus der Activity abläuft. Wichtige Callbacks:
onAttach– Fragment an Activity angehängtonCreate– Fragment erstellt (noch keine View)onCreateView– Layout ladenonViewCreated– View bereit; hier die UI einrichtenonDestroyView– View zerstört (View-Referenzen freigeben)onDetach– Fragment entfernt
Ein Fragment erstellen
Erstellen Sie eine Klasse, die Fragment erweitert, und überschreiben Sie onCreateView, um das Layout zu laden:
import androidx.fragment.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
class HomeFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_home, container, false)
}
}ViewBinding in Fragments
Verwenden Sie ViewBinding in Fragments – geben Sie das Binding jedoch in onDestroyView frei, um Memory Leaks zu vermeiden:
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.tvTitle.text = "Welcome!"
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // prevent memory leak
}
}Fragment-Layout-XML
Erstellen Sie res/layout/fragment_home.xml genau wie ein Activity-Layout. Die Root-View wird zur View des Fragments:
<!-- res/layout/fragment_home.xml -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="Home" />
</LinearLayout>Ein Fragment zu einer Activity hinzufügen
Es gibt zwei Möglichkeiten, ein Fragment zu einer Activity hinzuzufügen:
- Statisch (XML) – im Layout mit dem Tag
<fragment>deklarieren. Zur Laufzeit festgelegt. - Dynamisch (Code) –
FragmentManagerund Transaktionen verwenden. Kann zur Laufzeit ausgetauscht werden.
<!-- Static: in activity_main.xml -->
<fragment
android:id="@+id/homeFragment"
android:name="com.example.HomeFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />Dynamische Fragment-Transaktionen
Verwenden Sie supportFragmentManager, um Fragments zur Laufzeit hinzuzufügen, zu ersetzen oder zu entfernen:
// In Activity:
class MainActivity : AppCompatActivity(R.layout.activity_main) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, HomeFragment())
.commit()
}
}
fun showDetail(id: Int) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, DetailFragment.newInstance(id))
.addToBackStack(null) // allow back navigation
.commit()
}
}Argumente an Fragments übergeben
Übergeben Sie Daten über ein Bundle mithilfe des Factory-Musters mit einem companion object. Verwenden Sie niemals einen Fragment-Konstruktor mit Parametern – Android erstellt Fragments nach Konfigurationsänderungen mit einem parameterlosen Konstruktor neu:
class DetailFragment : Fragment() {
companion object {
private const val ARG_ID = "item_id"
fun newInstance(itemId: Int): DetailFragment {
return DetailFragment().apply {
arguments = Bundle().apply {
putInt(ARG_ID, itemId)
}
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val itemId = requireArguments().getInt(ARG_ID)
// use itemId to load data
}
}Kommunikation zwischen Fragment und Activity
Verwenden Sie ein im Fragment definiertes Interface, das von der Activity implementiert wird. Das Fragment erhält über onAttach eine Referenz:
class ListFragment : Fragment() {
interface OnItemSelected {
fun onItemSelected(id: Int)
}
private var listener: OnItemSelected? = null
override fun onAttach(context: Context) {
super.onAttach(context)
listener = context as? OnItemSelected
}
private fun handleClick(id: Int) {
listener?.onItemSelected(id)
}
override fun onDetach() {
super.onDetach()
listener = null
}
}Back Stack
Wenn Sie in einer Transaktion addToBackStack(null) aufrufen, entfernt das Drücken der Zurück-Taste das Fragment aus dem Stack:
- Ohne
addToBackStack– die Zurück-Taste beendet die Activity - Mit
addToBackStack– die Zurück-Taste kehrt zum vorherigen Fragment zurück - Verwenden Sie
popBackStack(), um programmgesteuert zurückzunavigieren
Fragment in einem Container
Das Activity-Layout benötigt lediglich eine Container-View – normalerweise ein FrameLayout mit einer ID. Das Fragment füllt diesen Container:
<!-- activity_main.xml -->
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />Schnelltest
Warum sollten Sie niemals Konstruktorargumente an ein Fragment übergeben, sondern stattdessen ein Bundle über eine companion Factory verwenden?
Zusammenfassung: Fragments
Fragments sind die Bausteine moderner Android-UIs:
Fragmenterweitern und das Layout inonCreateViewladen- Die UI in
onViewCreatedeinrichten - ViewBinding in
onDestroyViewfreigeben - Daten über
Bundleund eine companion Factory (newInstance) übergeben addToBackStackfür die Zurück-Navigation verwenden- Über ein Interface mit der Activity kommunizieren
Als Nächstes: Gefährliche Berechtigungen zur Laufzeit anfordern.
Häufig gestellte Fragen
Ist die Lektion „Fragments“ kostenlos?
Ja — der vollständige Text von „Fragments“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 7 Lektionen.
Was lerne ich in „Fragments“?
Erstellen Sie modulare Benutzeroberflächen mit Fragments. Lernen Sie den Fragment-Lebenszyklus, ViewBinding in Fragments, die Übergabe von Argumenten, die Verwaltung des Backstacks und die Kommunikat… Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 6 von 7.
Wie lange dauert die Lektion „Fragments“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Projektstruktur und Manifest
- Aktivitäten und Lebenszyklus
- Layouts und Views
- Benutzereingaben verarbeiten
- Intents und Navigation
- Fragments
- Berechtigungen und Laufzeitanfragen