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
MutableStateFlowauf und stellen Sie einen schreibgeschütztenStateFlowbereit. - Gruppieren Sie zusammengehörige Felder in einer UI-Zustands-Data-Class.
- Aktualisieren Sie den Zustand mit
copy()überupdate {}. - 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
- Warum ein ViewModel verwenden?
- Zustand aus dem ViewModel bereitstellen
- Der Android-Lifecycle
- collectAsStateWithLifecycle