新手在这里,只是想知道这两个片段之间的区别

我是第一次使用lazyVerticalGrid,并编写了这段代码,它可以按预期工作

    LazyVerticalGrid(columns = GridCells.Fixed(2)) {
        items(DataSource.topics.size) {
            CourseCard(topic = DataSource.topics[it])
        }
    }

但是,发现还有另一种方法,显然也涉及添加一个导入语句,

import androidx.compose.foundation.lazy.grid.items

    LazyVerticalGrid(columns = GridCells.Fixed(2)) {
        items(DataSource.topics) {
            CourseCard(topic = it)
        }
    }

有什么区别,什么是正确的方法?

在导入之前和导入后,我try 在按住Ctrl键的同时单击Items()函数,它会将我带到相同的LazyGridDsl.kt文件.

推荐答案

第一个是通用的,你只需要传递一些条目,然后它就会给你索引,你每次都必须自己获取正确的条目--不仅是在itemContent内,还有keyspancontentType.它是LazyGridScope的成员函数,因此不需要导入即可使用.

当你有一个项目列表时,第二个是一个比第一个更好的 Select --它基本上只是调用第一个,然后为你调用items[index],所以你可以直接处理这个项目.与第一个不同,它是LazyGridScope的扩展函数,因此需要导入才能使用它.

没有正确的方法,也是好的.如果你有一个项目列表,你可以使用第二个,节省自己的items[index]电话.但是有时候,你可能也需要索引(例如,区别对待第一个/最后一个项目),那么你可以使用第一个.

Kotlin相关问答推荐

直接从SON解析NonEmptyList

创建具有共同父类型的两种不同类型对象的列表的最有效方法是什么?

如何使用Kotlinx.LocalDateTime获取重置时间为00:00的当前日期?

在Kotlin lambda的参数中如何指定函数类型?

协程子作业(job)取消

有什么方法可以要求在 kotlin 中的类型参数上进行注释?

kotlin 父类具有依赖于抽象变量的变量

如何在 Spring Boot 3 中为内部类提供运行时提示

Kotlin 编译器在构造函数中报告未使用的表达式,以便构建器采用 vararg lambda

如何在 kotlin @Parcelize 中使用 null

Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

IntelliJ 不会根据 ktlint 的期望对 Kotlin 导入进行排序

Kotlin 顶级函数与对象函数

在 Koin 中提供一个 Instance 作为其接口

如何使用Kotlin Dokka记录主构造函数参数

无法在Kotlin中使用argb color int值?

Spring Boot:更改属性占位符符号

如果作为 RxJava Observable 提供,Kotlin 密封类子类需要强制转换为基类

如何限制kotlin协程的最大并发性

Kotlin - 如何获取注释属性值