Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
329 of 502 menu
◀ ▶

Класс ViewModel

Класс ViewModel держит состояние и логику, которым не нужна каждая перерисовка Compose. Объект живёт, пока живёт scope активности или NavBackStackEntry. В Compose его получают функцией viewModel. Перед уничтожением ViewModel система вызывает метод onCleared.

Синтаксис

class ScreenViewModel : ViewModel() { }

Методы

Метод Описание
onCleared Вызывается перед удалением ViewModel. Здесь отменяют Job и закрывают ресурсы.

Пример

Давайте выведем текст из ViewModel через Flow:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.lifecycle.ViewModel import androidx.lifecycle.viewmodel.compose.viewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val model: LabelViewModel = viewModel() val text by model.text.collectAsState() Button(onClick = { model.flip() }) { Text(text = "abcde") } Text(text = text) } } } class LabelViewModel : ViewModel() { private val _text = MutableStateFlow("abcde") val text = _text.asStateFlow() fun flip() { _text.value = if (_text.value == "abcde") { "12345" } else { "abcde" } } }

На экране текст меняется по кнопке и сохранится при повороте экрана.

Смотрите также

  • функция viewModel,
    которая достаёт ViewModel в Compose
  • класс SavedStateHandle,
    который передают во ViewModel для Bundle
  • метод onCleared,
    где освобождают ресурсы модели
  • функция collectAsState,
    которой читают StateFlow на экране
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить