Функция rememberSaveable
Функция rememberSaveable работает как
remember,
но сохраняет значение в
SavedStateHandle
активности или NavBackStackEntry.
После поворота экрана или пересоздания
активности счётчик или текст вернутся.
Внутри лямбды часто вызывают
mutableStateOf.
Синтаксис
var count by rememberSaveable { mutableIntStateOf(0) }
Параметры
| Параметр | Описание |
|---|---|
inputs |
Ключи, как у remember. При смене ключа значение пересчитают и сохранят заново. |
saver |
Объект Saver, который пишет и читает значение в Bundle. Для простых типов есть готовые реализации. |
init |
Лямбда, создающая начальное значение, если в сохранённом состоянии его нет. |
Пример
Давайте сохраним счётчик нажатий:
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.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var count by rememberSaveable {
mutableIntStateOf(0)
}
Button(onClick = { count++ }) {
Text(text = "abcde")
}
Text(text = if (count == 0) "abcde" else "12345")
}
}
}
На экране после поворота устройства
счётчик не обнулится, текст останется "12345",
если нажимали кнопку.
Пример
Давайте сохраним строку между пересозданиями:
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.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var text by rememberSaveable {
mutableStateOf("abcde")
}
Button(onClick = { text = "12345" }) {
Text(text = "abcde")
}
Text(text = text)
}
}
}
На экране выбранный текст "12345"
вернётся после уничтожения активности системой.
Смотрите также
-
функция
remember,
которая не переживает пересоздание активности -
класс
SavedStateHandle,
куда попадают сохранённые данные -
функция
mutableStateOf,
которой создают состояние внутри лямбды -
класс
ViewModel,
который тоже переживает поворот экрана