在 Jetpack compose 中尝试 LazyColumn() 时出现奇怪的错误

Getting weird Error when trying LazyColumn() in Jetpack compose

我正在尝试 运行 一个简单的 LazyColumn 对象,但是如果没有这个奇怪的错误我就无法 运行 它。 这是我的代码:

@Composable 
fun Test(){
    LazyColumn() {
        Text(text = "Placeholder", fontSize= 30.sp)
        Spacer(modifier = Modifier.padding(10.dp))
    }
}

错误如下:

org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@74c0fa2 (error: could not render message)

org.jetbrains.kotlin.diagnostics.SimpleDiagnostic@c077eec3 (error: could not render message)

是我的代码有问题,还是bug? *我想通过一遍又一遍地复制和粘贴 LazyColumn() 语句后的行来测试滚动功能

试试这个:

@Composable 
fun Test(){
    LazyColumn() {
        for (i in 1..10) {
            TestItem(i)
        }
    }
}

@Composable
fun TestItem(i: Int) {
    Text(text = "Placeholder $i", fontSize = 30.sp)
    Spacer(modifier = Modifier.padding(10.dp))
}

有了 1.0.0-beta04,您可以使用:

val itemsList = (0..50).toList()
LazyColumn() {
    items(itemsList) {
        Text(text = "Placeholder", fontSize = 30.sp)
        Spacer(modifier = Modifier.padding(10.dp))
    }
}

LazyListScope in order to display the items you have to use one the provided functions:item, items, itemsindexed and stickyHeader.

Studio 应该显示的错误是@Composable invocations can only happen from the context of a @Composable function;这是编译此函数时出现的错误。 Studio 显示 (error: could not render message) 是团队正在处理的已知错误。

compose 编译器插件生成此错误的原因是 LazyColumn 预期的 lambda 不是可组合的 lambda,而是描述该列的 LazyList DSL。例如,

@Composable 
fun Test(){
    LazyColumn() {
        items(10_000) {
            Text(text = "Placeholder $it", fontSize = 30.sp)
            Spacer(modifier = Modifier.padding(10.dp))
        }
    }
}

可能就是您想要的。它不会创建 10,000 个项目,它只会创建足以适合屏幕的项目,并且会根据需要创建额外的行(丢弃被遮挡的行)直到第 9,999 行。