我一直在尝试显示AlertDialog
来自 onClick
的 Card
在 Android Jetpack Compose 的动态列表中。
我收到编译时错误 @Composable 调用只能在 @Composable 函数的上下文中发生 做的时候。
下面是我的代码 fragment :
@Preview(showBackground = true)
@Composable
fun prepareCard(card: Card) {
MyApplicationTheme() {
androidx.compose.material.Card() {
Column(Modifier.clickable {
Log.d("TAG", "clicked : " + card.name)
val showDialog = mutableStateOf(true)
if (showDialog.value) {
alert(card)
}
...
}
}
}
我做了alert()
从上面的代码调用的可组合函数@Composable
fun alert(card : Card) {
AlertDialog(
title = {
Text("")
},
text = {
Text(text = card.name)
}, onDismissRequest = {
},
confirmButton = {},
dismissButton = {}
)
}
如图所示,我收到编译时错误请帮助解决这个问题
笔记 :
我尝试过如下修改,它解决了编译时错误,但仍然没有显示
AlertDialog
点击Card
@Preview(showBackground = true)
@Composable
fun prepareCard(card: Card) {
MyApplicationTheme() {
val showDialog = mutableStateOf(false)
if (showDialog.value) {
alert(card)
}
androidx.compose.material.Card() {
Column(Modifier.clickable {
Log.d("kushal", "clicked : " + card.name)
showDialog.value = true
}) {
...
}
}
最佳答案
使用 remember
在您的 showDialog
解决不显示AlertDialog
的问题.
val showDialog = remember { mutableStateOf(false) }
if (showDialog.value) {
// alert...
}
Card() {
Column(Modifier.clickable(
onClick = {showDialog.value = true})
) {}
}
也在你的Alert()
你应该处理状态的函数。@Composable
fun Alert(name: String,
showDialog: Boolean,
onDismiss: () -> Unit) {
if (showDialog) {
AlertDialog(
title = {
Text("Title")
},
text = {
Text(text = name)
},
onDismissRequest = onDismiss,
confirmButton = {
TextButton(onClick = onDismiss ) {
Text("OK")
}
},
dismissButton = {}
)
}
}
并调用它:val showDialog = remember { mutableStateOf(false) }
Card() {
if (showDialog.value) {
Alert(name = "Name",
showDialog = showDialog.value,
onDismiss = {showDialog.value = false})
}
Column(Modifier.clickable(
onClick = {showDialog.value = true})
) {}
}
关于android - 无法从 Jetpack Compose 中的 onClick 显示 AlertDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66952179/