ViewModel und LiveData
Überstehen Sie Konfigurationsänderungen mit ViewModel. Stellen Sie reaktive Datenströme mit LiveData bereit und beobachten Sie sie in Activities und Fragments.
ViewModel und LiveData ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 6. 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 6 Lektionen.
Das Problem mit Activities
Das direkte Speichern von Daten in einer Activity bringt zwei große Probleme mit sich:
- Wenn der Benutzer das Telefon dreht, wird die Activity zerstört und neu erstellt — alle Ihre Daten gehen verloren
- Wenn Sie Daten in
onCreateaus dem Netzwerk laden, werden sie bei jeder Drehung erneut abgerufen — unnötiger Aufwand
ViewModel löst beide Probleme.
Was ist ViewModel?
ViewModel ist eine Android Architecture Component, die:
- Konfigurationsänderungen übersteht (Drehung, Designänderung)
- UI-bezogene Daten und Geschäftslogik enthält
- Erst zerstört wird, wenn der Benutzer den Bildschirm dauerhaft verlässt
Als Faustregel gilt: Wenn Daten eine Drehung überstehen sollen, speichern Sie sie in einem ViewModel.
ViewModel erstellen
Erweitern Sie ViewModel und fügen Sie es zu Ihren Gradle-Abhängigkeiten hinzu:
// app/build.gradle:
// implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0'
// implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.7.0'
import androidx.lifecycle.ViewModel
class CounterViewModel : ViewModel() {
var count = 0
private set
fun increment() {
count++
}
fun reset() {
count = 0
}
}ViewModel in einer Activity abrufen
Verwenden Sie ViewModelProvider (oder den Delegaten by viewModels()), um eine ViewModel-Instanz abzurufen:
import androidx.activity.viewModels
class CounterActivity : AppCompatActivity() {
private lateinit var binding: ActivityCounterBinding
// Android manages the ViewModel lifecycle — never instantiate it yourself
private val viewModel: CounterViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityCounterBinding.inflate(layoutInflater)
setContentView(binding.root)
// This shows the count is preserved after rotation!
binding.tvCount.text = viewModel.count.toString()
binding.btnPlus.setOnClickListener {
viewModel.increment()
binding.tvCount.text = viewModel.count.toString()
}
}
}Was ist LiveData?
LiveData ist ein beobachtbarer Datenspeicher. Die UI beobachtet LiveData-Werte und wird automatisch aktualisiert, wenn sich der Wert ändert.
- Lebenszyklusbewusst — aktualisiert nur aktive Beobachter (keine Abstürze, wenn sich die Activity im Hintergrund befindet)
- Immer aktuell — neue Beobachter erhalten sofort den neuesten Wert
LiveData im ViewModel
Verwenden Sie MutableLiveData privat (das ViewModel kann schreiben) und stellen Sie es öffentlich als LiveData bereit (die UI kann nur beobachten):
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class CounterViewModel : ViewModel() {
private val _count = MutableLiveData(0)
val count: LiveData<Int> = _count // read-only for the UI
fun increment() {
_count.value = (_count.value ?: 0) + 1
}
fun reset() {
_count.value = 0
}
}LiveData in einer Activity beobachten
Rufen Sie .observe(lifecycleOwner) { value -> } auf, um auf Änderungen zu reagieren:
class CounterActivity : AppCompatActivity() {
private val viewModel: CounterViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// Automatically updates TextView whenever count changes
viewModel.count.observe(this) { count ->
binding.tvCount.text = count.toString()
}
binding.btnPlus.setOnClickListener { viewModel.increment() }
binding.btnReset.setOnClickListener { viewModel.reset() }
}
}LiveData vs. State Flow
LiveData ist der klassische Ansatz. Moderner Kotlin-Code verwendet häufig stattdessen StateFlow aus Kotlin Coroutines:
StateFlow— coroutinebasiert, keine Android-Abhängigkeit- Wird in der Activity mit
repeatOnLifecyclegesammelt - Besser für eine komplexe Zustandsverwaltung geeignet
Beide funktionieren gut — LiveData ist einfacher für den Einstieg; StateFlow sehen Sie in größeren Apps.
ViewModel mit mehreren Beobachtern
Mehrere UI-Komponenten können dieselben LiveData beobachten. Beispielsweise können sowohl ein TextView als auch der Aktivierungszustand eines Buttons auf denselben Datenwert im ViewModel reagieren — ohne zusätzlichen Code im ViewModel.
Dadurch werden Zuständigkeiten sauber getrennt: Das ViewModel enthält den Zustand, die UI beobachtet ihn lediglich und stellt ihn dar.
Schnelltest
Wann wird ein ViewModel zerstört?
Zusammenfassung: ViewModel & LiveData
Sie wissen nun, wie Sie UIs erstellen, die den Lebenszyklus berücksichtigen:
- ViewModel übersteht Konfigurationsänderungen (Drehung)
- Verwenden Sie
by viewModels(), um ein ViewModel in einer Activity abzurufen - Muster: MutableLiveData (privat) / LiveData (öffentlich)
- Beobachten Sie mit
.observe(this) { value -> updateUI(value) } - Die UI wird automatisch aktualisiert — keine manuelle Aktualisierung erforderlich
Als Nächstes: Speichern Sie Daten dauerhaft mit der Room-Datenbank.
Häufig gestellte Fragen
Ist die Lektion „ViewModel und LiveData“ kostenlos?
Ja — der vollständige Text von „ViewModel und LiveData“ 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 6 Lektionen.
Was lerne ich in „ViewModel und LiveData“?
Überstehen Sie Konfigurationsänderungen mit ViewModel. Stellen Sie reaktive Datenströme mit LiveData bereit und beobachten Sie sie in Activities und Fragments. 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 1 von 6.
Wie lange dauert die Lektion „ViewModel und LiveData“?
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
- ViewModel und LiveData
- Room-Datenbank
- Coroutines und Suspend-Funktionen
- Repository-Pattern
- Navigation Component
- Dependency Injection mit Hilt