首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jetpack组合中在LazyColum中添加分隔符

在jetpack组合中在LazyColum中添加分隔符
EN

Stack Overflow用户
提问于 2022-11-24 08:25:45
回答 3查看 39关注 0票数 0

我正在学习LazyColum in 喷气式组合。在某些情况下,我想在我的每个项目中添加Separator,请看下面的MessageList()函数。此外,我将添加一个截图,以清楚地了解我想要什么。请使函数可重用。条件如下:

1. TopBottom分离器。

2TopBottom中都没有分隔符

但问题是,我不知道在喷气背包写作的习惯方式。我使用Recyclerview在Xml中完成了这一工作。

代码语言:javascript
运行
复制
import androidx.compose.foundation.lazy.items

@Composable
fun MessageList(messages: List<Message>) {
    LazyColumn {
        items(messages) { message ->
            MessageRow(message)
        }
    }
}

你们能帮我吗?非常感谢

EN

回答 3

Stack Overflow用户

发布于 2022-11-24 08:34:22

把它作为你项目的一部分

代码语言:javascript
运行
复制
LazyColumn {

    items(messages) { message ->
        MessageRow(message)
        Box(Modifier.fillMaxWidth().height(1.dp).background(Color.Red)) //for after every element
    }
}

如果只想将其添加到列表的顶部/底部,则可以使用item:

代码语言:javascript
运行
复制
LazyColumn {
    item { Box(Modifier.fillMaxWidth().height(1.dp).background(Color.Red)) }
    items(messages) { message ->
        MessageRow(message)
    }
}

使它有条件地使用itemsIndexed

代码语言:javascript
运行
复制
LazyColumn {
    itemsIndexed(messages) { index, message ->
        if(index == 0) {
        //First element, either show divider or don't
        }
        ....
        MessageRow(message)
        ....
        if (index == messages.size) {
        // last item, show divider or don't
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-24 08:37:36

只需将可组合的除法器添加到MessageRow中即可:

代码语言:javascript
运行
复制
@Composable
fun MessageRow(message:Message){
    Column(){
        Divider(Modifier.fillMaxWidth(), thickness = 1.dp, color = Color.LightGray) //above your row
        Row(Modifier.fillMaxWidth){
            
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-11-24 09:56:01

我这样解决是为了显示边界还是隐藏边界。

代码语言:javascript
运行
复制
package com.abc.app.common.composables

import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.Divider
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.tooling.preview.Preview
import com.abc.app.R
import com.abc.app.theme.Cloudy
import com.abc.app.theme.AbcTheme
import com.abc.app.theme.Red

@Composable
fun <T : Any> LazyListScopeColumn(
    itemList: List<T>,
    content: @Composable (T: Any) -> Unit,
    dividerColor: Color = Cloudy,
    dividerThickness: Int = R.dimen.separator_height_width,
    showDivider: Boolean = true,
) {
    LazyColumn(modifier = Modifier.fillMaxWidth()) {
        itemsIndexed(itemList) { index, item ->
            if (index == 0 && showDivider) {
                Divider(color = dividerColor, thickness = dimensionResource(dividerThickness))
            }
            content(item)
            if (index <= itemList.lastIndex && showDivider) {
                Divider(color = dividerColor, thickness = dimensionResource(dividerThickness))
            }
        }
    }
}

@Preview(showBackground = true)
@Composable
fun LazyColumnListScopePreview() {
    AbcTheme {
        Column {
            Spacer(modifier = Modifier.height(10.dp)
            LazyListScopeColumn(
                listOf("item 1", "item 2"),
                content = { item ->
                    Text(
                        text = "$item",
                        modifier = Modifier.padding(vertical = 10.dp)
                    )
                },
                dividerColor = Red,
            )
            Spacer(modifier = Modifier.height(10.dp))
        }
    }
}

@Preview(showBackground = true)
@Composable
fun LazyColumnListScopePreviewNoBorder() {
    AbcTheme {
        Column {
            Spacer(modifier = Modifier.height(10.dp)
            LazyListScopeColumn(
                listOf("item 1", "item 2"),
                content = { item ->
                    Text(
                        text = "$item",
                        modifier = modifier = Modifier.padding(vertical = 10.dp))
                },
                dividerColor = Red,
                showDivider = false,
            )
            Spacer(modifier = Modifier.height(10.dp))
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74557673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档