【发布时间】:2021-09-08 10:03:34
【问题描述】:
所以我想要实现的是:
- 一个家庭可组合,承载一个底部导航栏(这里使用脚手架)
- 底部导航栏附加了 3 个其他可组合项
- 3 个可组合项中的每一个都有自己的惰性列
- 3 个惰性列中的每个项目都有一个菜单图标,单击该图标会打开底部工作表
借助此处的答案,我可以通过将脚手架封闭在 ModalBottonSheetLayout 中来实现上述目的:Jetpack Compose Scaffold + Modal Bottom Sheet
问题:
- 底部工作表的目的是显示一个菜单项,单击该菜单项应从lazyColumn 中删除该项目
- 所以底部工作表需要知道被点击删除它的项目的详细信息
我怎样才能做到这一点? 主可组合项没有任何有关其托管的可组合项中存在的惰性列中的项目的信息。
有没有其他方法可以解决这个问题?
这是我的代码:
HomeComposable.kt
fun HomeComposable(homeViewModel: HomeViewModel,
navController: NavHostController) {
ModalBottomSheetLayout(
sheetContent = {
//get the id of the message here so it can be
//deleted
Button(
text = "delete Message")
onClick = deleteMessage(message.id
)
}
) {
Scaffold(
content = {
NavHost(navController = navController, startDestination =
WHATS_NEW_COMPOSABLE) {
composable(MESSAGES_COMPOSABLE) {
MessageItemsComposable(
homeViewModel,
navController,
bottomSheetState
)
}
}
}
)
MessageItemsComposable.kt
val messages : List<Messages> = getMessagesFromNetwork()
LazyColumn {
items(messages) { message ->
Row{
Text(message.title)
Icon(
onClick = {
bottomState.show()
//show a bottom sheet with an option to delete
}
) {
//Draw the icon
}
}
}
}
【问题讨论】:
-
可以附上代码吗?
-
嗨@StefanoSansone,我已经用我的代码更新了问题
-
你能解决这个问题吗?
-
@vn1gam 是的,我能够解决它,但解决方案相当复杂......所以这就是我所做的: - 在 NavGraph 中创建一个可变变量,它保存当前值在惰性列中单击的项目之一中单击的菜单项(初始化时它将是一个虚拟值) - 将此变量作为参数传递给相应的可组合项 - 在 LC 中单击菜单项时填充此值 - 现在NavGraph 在变量中填充了正确的值 - 底部工作表现在可以显示菜单并为此特定项目执行逻辑希望这有助于...
标签: android android-jetpack-compose android-jetpack-compose-list jetpack-compose-navigation android-jetpack-compose-scaffold