You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套于HorizontalPager的LazyRow滚动后无法立即点击项

问题解答

这种现象是正常的,属于Jetpack Compose滚动组件的默认设计行为。

原因分析

当你快速滚动LazyRow到首尾边界时,组件会触发**弹性滚动(Overscroll)**的惯性动画,这段时间内触摸事件会被滚动容器的触摸拦截机制优先处理——系统会先完成滚动的收尾动画,防止误触干扰滚动体验,因此1-2秒内点击事件无法传递给clickable修饰的子组件。

Compose的滚动容器(LazyRow、HorizontalPager等)都依赖ScrollableState管理滚动状态,边界处的弹性滚动是默认启用的交互逻辑,目的是让滚动体验更自然流畅。

解决方案(可选)

如果需要消除这个延迟,可以禁用LazyRow的弹性滚动效果:

Column(modifier = Modifier.fillMaxSize()) {
    HorizontalPager(pageCount = 2) {
        when (it) {
            0 -> {
                LazyRow(
                    scrollBehavior = ScrollDefaults.rememberScrollBehavior(
                        overscrollEffect = null // 禁用边界弹性滚动
                    )
                ) {
                    items(20) {
                        Spacer(modifier = Modifier.width(10.dp))
                        Box(modifier = Modifier
                            .size(60.dp)
                            .background(Color.Red)
                            .clickable { }
                        )
                        Spacer(modifier = Modifier.width(10.dp))
                    }
                }
            }
            1 -> {
                Box(modifier = Modifier.fillMaxSize())
            }
        }
    }
}

禁用后,滚动到边界时不会有弹性动画,点击事件会立即触发,但滚动的手感会稍有变化。

内容的提问来源于stack exchange,提问作者Long Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:03:21