0Pricing
Android Academy · Lektion

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 onCreate aus 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 repeatOnLifecycle gesammelt
  • 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

  1. ViewModel und LiveData
  2. Room-Datenbank
  3. Coroutines und Suspend-Funktionen
  4. Repository-Pattern
  5. Navigation Component
  6. Dependency Injection mit Hilt
← Zurück zu Android Academy