0Pricing
Android Academy · Lektion

Zustand aus dem ViewModel bereitstellen

Steuern Sie die Compose-UI über ein ViewModel.

Zustand aus dem ViewModel bereitstellen ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. 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 4 Lektionen.

Zustand für die UI bereitstellen

Ein ViewModel enthält den Zustand, aber die UI benötigt eine Möglichkeit, diesen Zustand zu beobachten und sich bei Änderungen neu zu zeichnen.

Unter Android werden dafür heutzutage zwei häufige Werkzeuge verwendet: StateFlow und Compose-State.

Das Muster für veränderlichen und unveränderlichen Zustand

Eine bewährte Vorgehensweise besteht darin, eine private veränderliche zugrunde liegende Eigenschaft zu verwenden und eine öffentliche schreibgeschützte Version bereitzustellen.

So kann die UI den Zustand nicht versehentlich direkt verändern.

Mit StateFlow bereitstellen

Verwenden Sie intern einen MutableStateFlow und stellen Sie ihn als schreibgeschützten StateFlow bereit.

class CounterViewModel : ViewModel() {
    private val _count = MutableStateFlow(0)
    val count: StateFlow<Int> = _count.asStateFlow()

    fun increment() {
        _count.value++
    }
}

StateFlow in Compose sammeln

Das Composable wandelt den Flow mit collectAsState() in Compose-Zustand um (oder mit der später behandelten lebenszyklusbewussten Variante).

@Composable
fun CounterScreen(vm: CounterViewModel) {
    val count by vm.count.collectAsState()
    Text("Count: " + count)
}

Warum StateFlow einen Anfangswert benötigt

Ein StateFlow hat immer einen aktuellen Wert. Deshalb müssen Sie beim Erstellen einen Anfangswert angeben.

Jeder neue Collector erhält sofort den neuesten Wert und niemals einen leeren Stream.

Alternative: Compose mutableStateOf

Für einfachen, auf den Bildschirm begrenzten Zustand im ViewModel können Sie auch Compose-mutableStateOf verwenden, den Compose automatisch beobachtet.

class CounterViewModel : ViewModel() {
    var count by mutableStateOf(0)
        private set

    fun increment() { count++ }
}

StateFlow oder Compose State

  • StateFlow ist Teil der Kotlin-Coroutines und funktioniert überall, nicht nur in Compose. Es eignet sich hervorragend für gemeinsam genutzte, lebenszyklusbewusste Streams.
  • mutableStateOf ist spezifisch für Compose und sehr kompakt.

Für ViewModels in größeren Apps wird im Allgemeinen StateFlow bevorzugt.

Den Bildschirmzustand als ein Objekt modellieren

Gruppieren Sie zusammengehörige Felder statt vieler einzelner Flows in einer einzigen UI-Zustandsdatenklasse. Dadurch bleiben Aktualisierungen atomar und vorhersehbar.

data class ProfileUiState(
    val name: String = "",
    val isLoading: Boolean = false,
    val error: String? = null
)

Das UI-Zustandsobjekt bereitstellen

Stellen Sie einen einzigen StateFlow dieser Zustandsklasse bereit. Die UI liest alles aus einer einzigen Quelle der Wahrheit.

private val _uiState = MutableStateFlow(ProfileUiState())
val uiState: StateFlow<ProfileUiState> =
    _uiState.asStateFlow()

Unveränderlichen Zustand aktualisieren

Aktualisieren Sie den Zustand, indem Sie eine Kopie mit geänderten Feldern erzeugen, anstatt das alte Objekt zu verändern.

fun load() {
    _uiState.update { it.copy(isLoading = true) }
    // ... fetch, then:
    _uiState.update {
        it.copy(isLoading = false, name = "Ada")
    }
}

Ereignisse fließen nach oben, Zustand fließt nach unten

Das ist der Kern des unidirektionalen Datenflusses:

  • Der Zustand fließt vom ViewModel nach unten zur UI.
  • Ereignisse fließen über Funktionsaufrufe von der UI nach oben zum ViewModel.

Kurzer Test

Testen Sie Ihr Verständnis vom Bereitstellen des Zustands.

Zusammenfassung

Sie haben gelernt:

  • Bewahren Sie einen privaten MutableStateFlow auf und stellen Sie einen schreibgeschützten StateFlow bereit.
  • Gruppieren Sie zusammengehörige Felder in einer UI-Zustands-Data-Class.
  • Aktualisieren Sie den Zustand mit copy() über update {}.
  • Der Zustand fließt nach unten, Ereignisse fließen nach oben.

Häufig gestellte Fragen

Ist die Lektion „Zustand aus dem ViewModel bereitstellen“ kostenlos?

Ja — der vollständige Text von „Zustand aus dem ViewModel bereitstellen“ 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 4 Lektionen.

Was lerne ich in „Zustand aus dem ViewModel bereitstellen“?

Steuern Sie die Compose-UI über ein ViewModel. 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 2 von 4.

Wie lange dauert die Lektion „Zustand aus dem ViewModel bereitstellen“?

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. Warum ein ViewModel verwenden?
  2. Zustand aus dem ViewModel bereitstellen
  3. Der Android-Lifecycle
  4. collectAsStateWithLifecycle
← Zurück zu Android Academy