Класс MutableState
Интерфейс MutableState наследует
State
и добавляет запись в value.
Объект получают из
mutableStateOf.
Присвоение нового value планирует
перерисовку composable, которые его читают.
С делегатом by пишут
text = "12345" вместо
text.value = "12345".
Синтаксис
val state: MutableState<String> = mutableStateOf("abcde")
state.value = "12345"
Пример
Давайте изменим value по нажатию:
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.remember
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var text by remember { mutableStateOf("abcde") }
Button(onClick = { text = "12345" }) {
Text(text = "abcde")
}
Text(text = text)
}
}
}
На экране под кнопкой текст сменится
на "12345".
Пример
Давайте обратимся к value явно:
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.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val label: MutableState<String> = remember {
mutableStateOf("abcde")
}
Button(onClick = { label.value = "12345" }) {
Text(text = "abcde")
}
Text(text = label.value)
}
}
}
На экране тот же эффект: после нажатия
видно "12345".
Смотрите также
-
класс
State,
родительский интерфейс только для чтения -
функция
mutableStateOf,
которая создаёт MutableState -
функция
remember,
где хранят один объект состояния -
функция
rememberSaveable,
которая сохраняет MutableState в Bundle