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

Класс SavedStateHandle

Класс SavedStateHandle даёт ViewModel доступ к Bundle-подобному хранилищу. Данные переживают поворот и могут восстановиться после смерти процесса. Объект часто попадает в конструктор ViewModel при вызове viewModel с фабрикой по умолчанию. Чтение и запись делают методами get, set и remove.

Синтаксис

class MyViewModel( private val handle: SavedStateHandle, ) : ViewModel()

Методы

Метод Описание
get Читает значение по строковому ключу.
set Записывает значение по ключу.
remove Удаляет пару ключ-значение.

Пример

Давайте прочитаем строку из handle во ViewModel:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.lifecycle.SavedStateHandle 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: StoreViewModel = viewModel() val text by model.text.collectAsState() Text(text = text) } } } class StoreViewModel( handle: SavedStateHandle, ) : ViewModel() { private val _text = MutableStateFlow( handle.get<String>("label") ?: "abcde", ) val text = _text.asStateFlow() }

На экране будет "abcde" или восстановленное из handle значение.

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

  • метод set,
    которым пишут в handle
  • функция rememberSaveable,
    которая сохраняет State в Compose
  • класс ViewModel,
    которому передают SavedStateHandle
  • функция viewModel,
    которая создаёт ViewModel с handle
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить