Что на самом деле помнит Jetpack Compose, как он работает «под капотом»?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Что на самом деле помнит Jetpack Compose, как он работает «под капотом»?

Сообщение Anonymous »

В базовом руководстве по Codelab есть фрагмент, увеличивающий счетчик нажатия кнопки

Код: Выделить всё

@Composable
fun MyScreenContent(names: List = listOf("Android", "there")) {
val counterState = remember { mutableStateOf(0) }

Column(modifier = Modifier.fillMaxHeight()) {
Column(modifier = Modifier.weight(1f)) {
for (name in names) {
Greeting(name = name)
Divider(color = Color.Black)
}
}
Counter(
count = counterState.value,
updateCount = { newCount ->
counterState.value = newCount
}
)
}
}

@Composable
fun Counter(count: Int, updateCount: (Int) -> Unit) {
Button(
onClick = { updateCount(count + 1) },
colors = ButtonConstants.defaultButtonColors(
backgroundColor = if (count > 5) Color.Green else Color.White
)
) {
Text("I've been clicked $count times")
}
}
Очевидно, что помните, что {mutableStateOf(0) хранит состояние/значение. Мой вопрос в том, что делает Remember под капотом. Использование var count = Remember { 0 или mutableStateOf(0) без remember не увеличивает значение.

Код: Выделить всё

fun MyScreenContent(names: List = listOf("Android", "there")) {

var count = remember { 0 }

Column(modifier = Modifier.fillMaxHeight()) {
Column(modifier = Modifier.weight(1f)) {
for (name in names) {
Greeting(name = name)
Divider(color = Color.Black)
}
}
Counter(
count = count,
updateCount = { newCount ->
count = newCount
}
)
}
}
Фрагмент выше не обновляет значение, напечатанное в Text, помнит, что работает только с MutableState?

Подробнее здесь: https://stackoverflow.com/questions/653 ... r-the-hood
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»