android 在LazyVerticalGrid中重新组合后突出显示了错误的项目

piwo6bdm  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(166)

我有一个带有Button s的LazyVerticalGrid

@Composable
private fun Grid(
    items: List<ChoiceSelectorItem>,
    modifier: Modifier = Modifier,
    notifyEvent: (MyUIEvent) -> Unit
) {
    LazyVerticalGrid(
        modifier = modifier
    ) {
        items.forEach { item ->
            item {
                Button(onClick = {
                    notifyEvent(
                        MyUIEvent.OnItemClicked(
                            item = item,
                        )
                    )
                }) {
                    Text(text = item.name)
                }
            }
        }
    }
}

每次我点击一个项目,就会触发OnItemClicked事件,更新UI状态,并将一个新的items列表发送到Grid。结果,我可以在屏幕上看到一组新的项目。有时可能是2个项目,有时可能是5个。
问题是-当我点击按钮时-它启动“指示”涟漪效应和重组触发器,网格立即显示新的项目列表(甚至在指示动画结束之前)。因此,例如当我单击其中一个项目时,指示动画在该项目上启动,当列表更新时-我可以收到3行项目,而不是1行,并且我可以在项目上看到指示动画的第二部分,该部分不在用户点击的位置之下。
有没有办法延迟重组,直到按钮的指示涟漪动画完成?也许有其他的方法来解决这个问题?

bvn4nwqk

bvn4nwqk1#

通过使用AnimatedContent在重新合成之间添加动画解决了这个问题:

AnimatedContent(
        targetState = page,
        transitionSpec = {
            fadeIn(animationSpec = tween(durationMillis = 1000)) with
                fadeOut(animationSpec = tween(durationMillis = 250))
        }
    ) {
    // LazyVerticalGrid...
}

相关问题