如何在 LazyColumn Jetpack Compose 中的项目之间添加分隔线?

cpg*_*en2 8 android android-jetpack-compose android-jetpack-compose-list

我有一个如下所示的 LazyColumn:

LazyColumn (
    verticalArrangement = Arrangement.spacedBy(12.dp)
) {
    items(bookList) { book ->
        InProgressBookItem(book = book)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在列表中的每个项目之间添加一行,类似于在旧的 RecyclerView 上使用项目装饰?

Wil*_*ran 12

简单的:

LazyColumn (
    verticalArrangement = Arrangement.spacedBy(12.dp)
) {
    items(bookList) { book ->
        InProgressBookItem(book = book)
        Divider(color = Color.Black, thickness = 1.dp)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不会在最后一本书之后添加一个分隔线吗?我认为提问者希望它们**仅**在元素之间。 (5认同)

Gab*_*tti 9

目前,1.0.x您只需DividerLazyListScope.

就像是:

   LazyColumn(
        verticalArrangement = Arrangement.spacedBy(12.dp),
    ) {
        items(itemsList){
            Text("Item at  $it")
            Divider(color = Color.Black)
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果你想避免Divider在最后一个项目中,你可以使用:

   LazyColumn(
        verticalArrangement = Arrangement.spacedBy(12.dp),
    ) {
        itemsIndexed(itemsList) { index, item ->
            Text("Item at index $index is $item")
            if (index < itemsList.size-1)
                Divider(color = Color.Black, thickness = 1.dp)
        }

    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 提示:您可以编写“index &lt; itemsList.lastIndex”,而不是“index &lt; itemsList.size-1” (16认同)
  • 这是我的第一个想法,但我希望有一种更优雅/内置的方式来做到这一点。现在,这应该有效,谢谢! (2认同)
  • 或者 compose 核心团队会提供在 LazyColumn 函数中接受 Composable 的分隔符参数,而不是强迫我们做这样的蹩脚解决方法 (2认同)