Чтение LazyListState приводит к спорадическим рекомпозициям.Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Чтение LazyListState приводит к спорадическим рекомпозициям.

Сообщение Гость »

Рассмотрим следующий минимальный воспроизводимый код:

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

@Composable
fun Sandbox() {
val state = rememberLazyListState()

LazyColumn(
state = state,
modifier = Modifier.height(200.dp)
) {

// This line of code leads to sporadic recompositions.
// No recompositions once that line is commented out.
val test = DoSomething(state)

items(count = 50, key = {index -> index}) { index ->
Text(text = "Item: $index")
}
}

}

fun DoSomething(state: LazyListState) : Int? {
val items = state.layoutInfo.visibleItemsInfo
return null
}
Когда я несколько раз прокручиваю список вверх и вниз, это приводит к перекомпоновке:
[img]https://i. stack.imgur.com/d85xK.png[/img]

Как только я удаляю вызов DoSomething(state), у меня нет этой проблемы. Почему чтение состояния приводит к перекомпозиции?
Обновление:

[*]Обратите внимание, что элементы перекомпонуются, даже если их не трогают. Насколько я понимаю в Compose, их следует пропускать.
[*]При перемещении val test = DoSomething(state) из LazyColumn все работает как надо (Sandbox перекомпонует , LazyColumn пропускается, элементы вообще не затрагиваются). Однако мой вопрос не о том, как заставить его работать, а о том, почему он не работает должным образом при вызове val test = DoSomething(state) из LazyColumn


Подробнее здесь: https://stackoverflow.com/questions/783 ... mpositions
Ответить

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

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

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

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

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