Метод set
Метод set класса
SavedStateHandle
записывает значение, которое можно
восстановить после пересоздания процесса.
Ключ и значение передают параметрами.
Синтаксис
handle.set("label", "12345")
Параметры
| Параметр | Описание |
|---|---|
key |
Строковый ключ. |
value |
Сохраняемое значение. Должно быть совместимо с Bundle. |
Пример
Давайте сохраним текст по нажатию кнопки:
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.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: WriteViewModel = viewModel()
val text by model.text.collectAsState()
Button(onClick = { model.saveOther() }) {
Text(text = "abcde")
}
Text(text = text)
}
}
}
class WriteViewModel(
private val handle: SavedStateHandle,
) : ViewModel() {
private val _text = MutableStateFlow(
handle.get<String>("label") ?: "abcde",
)
val text = _text.asStateFlow()
fun saveOther() {
handle.set("label", "12345")
_text.value = "12345"
}
}
На экране текст сменится на "12345"
и ключ label попадёт в handle.
Смотрите также
-
метод
get,
которым читают сохранённое значение -
метод
remove,
которым стирают ключ -
класс
SavedStateHandle,
куда пишет set -
класс
ViewModel,
который держит handle в конструкторе