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

How to disable and enable scrolling in LazyColumn/LazyRow in Jetpack Compose?(如何在Jetpack Compose中禁用和启用LazyColumn/LazyRow中的滚动?)
本文介绍了如何在Jetpack Compose中禁用和启用LazyColumn/LazyRow中的滚动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要在LazyColumn中以编程方式动态启用和禁用滚动。

LazyListState上似乎没有任何相关函数,LazyColumn本身似乎也没有相关参数。如何在Compose中实现这一点?

推荐答案

(当前)没有内置方法来执行此操作,这是一个合理的功能请求。

但是scroll接口非常灵活,我们可以自己添加。基本上,我们在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)
            }
        }
    }
}

这篇关于如何在Jetpack Compose中禁用和启用LazyColumn/LazyRow中的滚动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)