Edw*_*aak 6 android kotlin android-jetpack-compose
在 Jetpack Compose 中有一个Modifier名为selectable.
将组件配置为可选择的,通常作为互斥组的一部分,在任何时间点只能选择一个项目。
我将它用于可滚动列表内的互斥无线电组。在我的情况下LazyColumn。这工作正常,单击可选区域会点亮它们并导致检测到点击。但是我注意到在滚动时“触摸”这些区域时该区域也会亮起。
如果您想了解我的意思,我制作了一个可组合的简单示例,只需滚动列表,您就会看到滚动如何触发短选择状态:
@Composable
    fun Example() {
        LazyColumn {
            item {
                repeat(100){
                    Column(
                        modifier = Modifier
                            .fillMaxWidth()
                            .height(40.dp)
                            .selectable(
                                selected = false,
                                onClick = { }
                            )
                    ) {
                        Text("Example")
                    }
                }
            }
        }
    }
有没有人想出如何解决某种行为?我尝试在https://developer.android.com/jetpack/compose/gestures寻找任何相关文档,但没有真正解释如何在滚动时“阻止”触摸事件。
您可以根据滚动状态有选择地启用 Modifier.selectable(enabled),但即使derivedStateOf我看到也存在巨大的性能损失。
val scrollState = rememberLazyListState()
val enableSelectable = derivedStateOf {
    !scrollState.isScrollInProgress
}
Modifier
    .fillMaxWidth()
    .height(40.dp)
    .selectable(
        enabled = enableSelectable.value,
        selected = false,
        onClick = { }
    )