Состояние теряется, когда лазиколомы перемещаются между блоками предметовAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Состояние теряется, когда лазиколомы перемещаются между блоками предметов

Сообщение Anonymous »

Кажется, что Lazycolumn теряет состояние на рядах при перемещении между различными вызовами предметов, даже если они имеют ключ. Насколько я понимаю, если бы два элемента существовали с той же ключом, то композиция не должна была бы перекомплектовать и, следовательно, могло бы запускать анимацию, запомнить состояние и т. Д., Но это не так.

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

@Composable
fun TestScreen() {
val items = remember { mutableStateListOf(Item(1, false), Item(2, false)) }

val untoggledItems = items.filter { !it.toggled }
val toggledItems = items.filter { it.toggled }

fun onClickItem(id: Int) {
for (i in items.indices) {
val item = items[i]
if (item.id == id) {
items[i] = item.copy(toggled = !item.toggled)
}
}
}

LazyColumn {
items(untoggledItems, { it.id }) { item ->
ItemRow(modifier = Modifier.animateItem(), id = item.id, toggled = item.toggled, onClick = { onClickItem(item.id) })
}

items(toggledItems, { it.id }) { item ->
ItemRow(modifier = Modifier.animateItem(), id = item.id, toggled = item.toggled, onClick = { onClickItem(item.id) })
}
}
}
< /code>
private data class Item(val id: Int, val toggled: Boolean)
< /code>
@Composable
private fun ItemRow(modifier: Modifier, id: Int, toggled: Boolean, onClick: () -> Unit) {
val color by animateColorAsState(if (toggled) Color.Red else Color.Blue, tween(5_000))
val randomNumber = remember { Random.nextDouble() }

Button(onClick = onClick, modifier = modifier) {
Text(text = "Item $id ($randomNumber)", color = color)
}
}
< /code>
В этом случае сдвигающаяся строка элемента отменена, а анимация и запоминающиеся значения теряются. [b] однако [/b], анимация элементов, предоставленная MODIFIER.ANIMATITEM () 
, все еще успешно выполняется, что исключает любые проблемы с ключами. На самом деле большинство официальных примеров делают несколько вызовов предметов. Если бы кто -то мог дать какое -либо представление об этом или источнике, где это официально упоминается (либо как ошибка, либо ожидаемое поведение), это было бы очень оценено. и т. д.)
[*] Прогресс анимации

Однако это невероятно громоздко, и я был бы удивлен, если это рекомендуемое использование.


Подробнее здесь: https://stackoverflow.com/questions/796 ... tem-blocks
Ответить

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

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

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

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

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