我希望你们都做得很好。
我对 Kotlin 很陌生,所以请耐心等待。
我在 jetpack compose 中创建了一个页面,如下图所示,它需要装饰,但至少我想实现该功能。 简单的应用程序界面,左侧是惰性列,右侧是数据显示。
左边是一个惰性列,显示来自 arraylist 的项目列表。惰性列中有可点击的卡片。
我需要的是,一旦使用从列中单击一个项目,其余项目详细信息将显示在右侧的第二个可组合项中。
代码看起来像这样
@Composable
fun Greeting() {
Row(
modifier = Modifier.fillMaxSize()
) {
LazyColumn(
modifier = Modifier
.fillMaxHeight()
.width(150.dp)
.background(color = Color.LightGray)
) {
items(photoList) { item ->
ProfileCard(photo = item) { <--- i need the item into the other composable.
// photoContent(
// id = item.id,
// owner = item.owner,
// secret = item.secret,
// server = item.server,
// farm = item.farm,
// title = item.title,
// ispublic = item.ispublic,
// isfriend = item.isfriend,
// isfamily = item.isfamily,
// url_s = item.url_s,
// height_s = item.height_s,
// width_s = item.width_s
// )
}
}
}
photoContent(
id = "",
owner = "",
secret = "",
server = "",
farm = 0,
title = "",
ispublic = 0,
isfamily = 0,
isfriend = 0,
url_s = "",
height_s = 0,
width_s = 0
)
}
}
此点击功能来自显示的卡片
@Composable
fun ProfileCard(photo: photo, clickAction: () -> Unit) {
Card( //We changed the default shape of Card to make a cut in the corner.
modifier = Modifier
.padding(top = 4.dp, bottom = 4.dp, start = 16.dp, end = 16.dp)
.fillMaxWidth()
.wrapContentHeight(
align = Alignment.Top
)
.clickable { clickAction.invoke() }, //<-- moving the action to main composable.
elevation = 8.dp,
backgroundColor = Color.White // Uses Surface color by default, so we have to override it.
) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
ProfileContent(photo, Alignment.Start)
}
}
}
我尝试了几种方法将数据传递到其他可组合但我总是得到错误:
@composable 调用只能在 @composable 函数的上下文中发生
而且我无法删除@Composable
注释,因为它具有可组合的内容...
我怎样才能以这种方式传递数据?或者没有导航就不可能?但这需要用户打开另一个页面而不是当前页面......