我一直在关注 Udemy 课程,在他们的源代码中,可组合函数中有这样的代码:
LazyColumn(
contentPadding = PaddingValues(SMALL_PADDING),
verticalArrangement = Arrangement.spacedBy(SMALL_PADDING)
) {
items(
items = heroes,
key = { hero -> hero.id }
) { hero ->
hero?.let {
HeroItem(hero = it, navController = navController)
}
}
}
但是,当我尝试时,它抛出了 2 个错误:
None of the following functions can be called with the arguments supplied:<br/>public inline fun <T> LazyListScope.items(items: Array<TypeVariable(T)>, noinline key: ((item: TypeVariable(T)) -> Any)? = ..., noinline contentType: (item: TypeVariable(T)) -> Any? = ..., crossinline itemContent: LazyItemScope.(item: TypeVariable(T)) -> Unit): Unit defined in androidx.compose.foundation.lazy<br/>public inline fun <T> LazyListScope.items(items: List<TypeVariable(T)>, noinline key: ((item: TypeVariable(T)) -> Any)? = ..., noinline contentType: (item: TypeVariable(T)) -> Any? = ..., crossinline itemContent: LazyItemScope.(item: TypeVariable(T)) -> Unit): Unit defined in androidx.compose.foundation.lazy
@Composable invocations can only happen from the context of a @Composable function
我似乎没有使用与他们相同的“项目”,但据我了解,他们使用的“项目”已被弃用,我找不到它。我不知道如何修改他们的代码以使其正常工作。
我相信我拥有所有必要的依赖项。该项目正在使用多个依赖项,包括 Room、Paging3、DaggerHilt、Coil 等。
我已经找到了这个问题的解决方案,但似乎不起作用。我真的很感激这个问题的解决方案。谢谢你。
确保有以下导入语句来使用
items
函数:以下函数均不能使用提供的参数进行调用
实际上jetpack compose中有多个
items
函数,所以有时android studio无法导入实际的函数,所以我们必须手动执行此操作。
@Composable 调用只能在 @Composable 函数的上下文中发生
导入上述正确的
items
函数后,这个问题也将得到解决。
我已经找到了问题的原因和解决方案。
LazyPagingItems
的 items
形式已被弃用。替代解决方案是:
// LazyColumn above
items(count = heroes.itemCount, key = heroes.itemKey { hero -> hero.id }) { index ->
Box(modifier = Modifier.fillMaxWidth()) {
index.let {
val item = heroes[it]!!
HeroItem(hero = item, navController = navController)
}
}
}