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

HorizontalPager嵌套LazyColumn后点击无响应问题求助

HorizontalPager嵌套LazyColumn滚动后点击列表项无响应问题

我在HorizontalPager中嵌套LazyColumn组件时,遇到了滚动后立即点击列表项无响应的问题,Sunflower应用中也存在同样的情况。

相关代码:

HorizontalPager(
    state = pagerState!!,
    modifier = Modifier.fillMaxHeight()
) {
    AssetsListView(
        assetsList = currentAssets.data ?: emptyList(),
        modifier = Modifier.fillMaxSize(),
        onRowSelected = { asset ->
            callBacks.onCoinSelected(asset, false)
        },
        baseAsset = marketBaseAsset,
    )
}

@Composable
fun AssetsListView(
    modifier: Modifier = Modifier,
    onRowSelected: (Asset) -> Unit = {},
    assetsList: List<Asset>,
    baseAsset: BaseAsset = BaseAsset.IRT,
) {
    CompositionLocalProvider(LocalRippleTheme provides SelectRippleTheme) {
        LazyColumn(modifier = modifier) {
            itemsIndexed(
                assetsList,
                key = { index, value -> value.id }) { index, value ->
                val onItemSelected = remember {
                    { onRowSelected(value) }
                }
                if(value.symbol != BaseAsset.IRT.symbol) {
                    CoinInfoRow(
                        asset = value,
                        modifier,
                        onRowClicked = onItemSelected,
                        baseAsset = baseAsset
                    )
                }
            }
        }
    }
}

问题原因:

这是由HorizontalPager的滚动惯性与触摸事件拦截逻辑导致的:

  • HorizontalPager在滚动结束后会保留短暂的惯性滚动状态,这段时间内它会持续拦截触摸事件,避免用户误触触发其他操作。
  • 当你在滚动后立刻点击LazyColumn的列表项时,触摸事件还被HorizontalPager持有,并未传递给子组件的点击区域,因此点击事件无法触发。
  • 在Compose的触摸事件分发机制中,父组件(HorizontalPager)的滚动状态拥有事件处理优先级,只有当滚动完全停止、惯性彻底消失后,触摸事件才会向下传递给子组件。

另外,如果LazyColumn子项的触摸区域设置不合理,或者点击事件的处理逻辑存在延迟,也会加重这个问题,但核心原因还是Pager的事件拦截机制。


内容的提问来源于stack exchange,提问作者Salma KD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:11:08