gpt4 book ai didi

kotlin - 为什么Horizo​​ntalPager 的自动滚动在手动滚动后就停止了?

转载 作者:行者123 更新时间:2023-12-05 03:26:46 35 4
gpt4 key购买 nike

我有一个Horizo​​ntalPager

val pageCount = bannerList.size
val startIndex = Int.MAX_VALUE / 2
val pagerState = rememberPagerState(initialPage = 100)
HorizontalPager(
count = Int.MAX_VALUE,
state = pagerState,
contentPadding = PaddingValues(
horizontal = 20.dp
),
modifier = Modifier
.fillMaxWidth()
) { index ->
// content goes here
}

我用 LaunchedEffect

让它像横幅一样每 4 秒滚动一次
LaunchedEffect(
key1 = Unit,
block = {
repeat(
times = Int.MAX_VALUE,
action = {
delay(
timeMillis = 4000
)
pagerState.animateScrollToPage(
page = pagerState.currentPage + 1
)
}
)
})

它每 4 秒滚动一次,但是当我手动滚动时 Horizo​​ntalPager 停止滚动!

有什么解决办法吗?

最佳答案

animateScrollToPage 在手动滚动期间调用时抛出异常:

java.util.concurrent.CancellationException: Current mutation had a higher priority

您可以通过多种方式解决它。例如只捕获异常并忽略它:

delay(
timeMillis = 4000
)
try {
pagerState.animateScrollToPage(
page = pagerState.currentPage + 1
)
} catch (_: Throwable) {
}

另一种选择是检查寻呼机是否正在被拖动,并在这段时间内停止您的 LaunchedEffect:

val isDragged by pagerState.interactionSource.collectIsDraggedAsState()
if (!isDragged) {
LaunchedEffect(Unit) {
// ...
}
}

我认为第二种解决方案更清晰,因为在这种情况下,计时器将重新启动,并延迟直到下一次滚动将始终相同。

关于kotlin - 为什么Horizo​​ntalPager 的自动滚动在手动滚动后就停止了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71657243/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com