Код: Выделить всё
@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
Мобильная версия