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

时间:2021-04-09 17:35:37

标签: android-studio kotlin android-jetpack-compose android-jetpack-compose-list

我正在尝试运行一个简单的 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)

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

3 个答案:

答案 0 :(得分:1)

通过 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 中,为了显示您必须使用提供的功能之一的项目:itemitemsitemsindexedstickyHeader。< /p>

答案 1 :(得分:0)

试试这个:

@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))
}

答案 2 :(得分:0)

应该显示的错误工作室是 @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 行。