Класс 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