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
相关产品推荐
相关产品推荐

