无法在 Jetpack Compose 中将 LazyListScope.items 与 PagingData 一起使用

问题描述 投票:0回答:2

我一直在关注 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 个错误:

  1. 在上述块的第 5 行:items(..) :
    None of the following functions can be called with the arguments supplied:<br/>public inline fun &lt;T&gt; LazyListScope.items(items: Array&lt;TypeVariable(T)&gt;, noinline key: ((item: TypeVariable(T)) -&gt; Any)? = ..., noinline contentType: (item: TypeVariable(T)) -&gt; Any? = ..., crossinline itemContent: LazyItemScope.(item: TypeVariable(T)) -&gt; Unit): Unit defined in androidx.compose.foundation.lazy<br/>public inline fun &lt;T&gt; LazyListScope.items(items: List&lt;TypeVariable(T)&gt;, noinline key: ((item: TypeVariable(T)) -&gt; Any)? = ..., noinline contentType: (item: TypeVariable(T)) -&gt; Any? = ..., crossinline itemContent: LazyItemScope.(item: TypeVariable(T)) -&gt; Unit): Unit defined in androidx.compose.foundation.lazy
  2. 在上述块的第 10 行: HeroItem(..):
    @Composable invocations can only happen from the context of a @Composable function

代码块截图: Code block screenshot from Android Studio

我的“物品”:Screenshot of

他们的“物品”:Screenshot of their

我似乎没有使用与他们相同的“项目”,但据我了解,他们使用的“项目”已被弃用,我找不到它。我不知道如何修改他们的代码以使其正常工作。

我相信我拥有所有必要的依赖项。该项目正在使用多个依赖项,包括 Room、Paging3、DaggerHilt、Coil 等。

我已经找到了这个问题的解决方案,但似乎不起作用。我真的很感激这个问题的解决方案。谢谢你。

android-jetpack-compose android-room android-jetpack android-paging-3 lazycolumn
2个回答
0
投票

确保有以下导入语句来使用

items
函数:
import androidx.compose.foundation.lazy.items

以下函数均不能使用提供的参数进行调用

实际上jetpack compose中有多个

items
函数,所以有时android studio无法导入实际的函数,所以我们必须手动执行此操作。

@Composable 调用只能在 @Composable 函数的上下文中发生

导入上述正确的

items
函数后,这个问题也将得到解决。


0
投票

我已经找到了问题的原因和解决方案。

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)
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.