gpt4 book ai didi

android - 用于 Jetpack Compose 中分页项目的 LazyVerticalGrid

转载 作者:行者123 更新时间:2023-12-05 05:41:25 28 4
gpt4 key购买 nike

我目前在 LazyPagingItems 中使用分页项 ( LazyVerticalGrid )通过下面的扩展功能,它工作正常。

inline fun <T : Any> LazyGridScope.items(
items: LazyPagingItems<T>,
crossinline itemContent: @Composable LazyGridItemScope.(item: T?) -> Unit
) {
items(count = items.itemCount) { index ->
itemContent(items[index])
}
}

但是,我想使用其他参数 LazyLazyout提供像key , span等并尝试了以下功能。

inline fun <T : Any> LazyGridScope.items(
items: LazyPagingItems<T>,
noinline key: ((item: T?) -> Any)? = null,
noinline span: (LazyGridItemSpanScope.(item: T?) -> GridItemSpan)? = null,
noinline contentType: (item: T?) -> Any? = { null },
crossinline itemContent: @Composable LazyGridItemScope.(item: T?) -> Unit
) = items(
count = items.itemCount,
key = if (key != null) { index: Int -> key(items[index]) } else null,
span = if (span != null) { { span(items[it]) } } else null,
contentType = { index: Int -> contentType(items[index]) }
) {
itemContent(items[it])
}

当我将该函数与 key 一起使用时, 它显示错误 Type mismatch: inferred type is Long? but Any was expected .

items(items = products, key = { product -> product?.productId }) {
//Content
}

我猜这是由于 public class LazyPagingItems<T : Any> 的声明所致.我如何解决它以将所有参数用于分页项目?

最佳答案

对于 product?.productId,您试图传递一个可选的 Int? 值,而 key 需要一个非可选的 任何值。

当您将 key = null 传递给计算 block 时,它会根据索引为每个对象创建一个唯一的键。特定项目键不能为 null,因为那样会使它等于其他项目键,这是被禁止的。

您可以只对非可选项目调用key,并提供index作为可选案例的默认值:

inline fun <T : Any> LazyGridScope.items(
// ...
noinline key: ((item: T) -> Any)? = null,
// ...
) = items(
// ...
key = if (key != null) { index: Int -> items[index]?.let(key) ?: index } else null,
// ...

用法:

items(items = products, key = { product -> product.productId }) {

关于android - 用于 Jetpack Compose 中分页项目的 LazyVerticalGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72279233/

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