gpt4 book ai didi

android - 如何在 Jetpack Compose 的 LazyColumn/LazyRow 中禁用和启用滚动?

转载 作者:行者123 更新时间:2023-12-04 23:36:57 34 4
gpt4 key购买 nike

我想在 LazyColumn 中以编程方式动态启用和禁用滚动.LazyListState 上似乎没有任何相关功能或LazyColumn上的相关参数本身。如何在 Compose 中实现这一点?

最佳答案

(目前)没有内置的方法来做到这一点,这是一个合理的功能要求。
但是,scroll API 足够灵活,我们可以自己添加。基本上,我们在 MutatePriority.PreventUserInput 创建了一个永无止境的假滚动。防止滚动,然后使用相同优先级的无操作滚动取消第一次“滚动”并重新启用滚动。
这是 LazyListState 上的两个实用函数禁用/重新启用滚动,以及它们的演示(需要一些导入,但 Android Studio 应该为您建议)。
请注意,因为我们正在控制滚动来执行此操作,所以调用 reenableScrolling还将取消任何正在进行的滚动或甩动(也就是说,您应该只在禁用滚动并且想要重新启用它时调用它,而不仅仅是确认它已启用)。

fun LazyListState.disableScrolling(scope: CoroutineScope) {
scope.launch {
scroll(scrollPriority = MutatePriority.PreventUserInput) {
// Await indefinitely, blocking scrolls
awaitCancellation()
}
}
}

fun LazyListState.reenableScrolling(scope: CoroutineScope) {
scope.launch {
scroll(scrollPriority = MutatePriority.PreventUserInput) {
// Do nothing, just cancel the previous indefinite "scroll"
}
}
}

@Composable
fun StopScrollDemo() {
val scope = rememberCoroutineScope()
val state = rememberLazyListState()
Column {
Row {
Button(onClick = { state.disableScrolling(scope) }) { Text("Disable") }
Button(onClick = { state.reenableScrolling(scope) }) { Text("Re-enable") }
}
LazyColumn(Modifier.fillMaxWidth(), state = state) {
items((1..100).toList()) {
Text("$it", fontSize = 24.sp)
}
}
}
}

关于android - 如何在 Jetpack Compose 的 LazyColumn/LazyRow 中禁用和启用滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66502096/

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