android - 无法从 Jetpack Compose 中的 onClick 显示 AlertDialog

标签 android kotlin android-jetpack android-jetpack-compose

我一直在尝试显示AlertDialog来自 onClickCard在 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
            }) {
            ...
           }
         }
enter image description here

最佳答案

使用 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/

相关文章:

nullable - 如何在 Kotlin 中编写可空值

android - 如何检测垂直滚动列的上/下滚动?

android - 如何使用导航类型 safeargs 插件将 Parcelable 类型的对象传递给 fragment

android - Jetpack 撰写 : Launch ActivityResultContract request from Composable function

android - ContentProvider 和 Binder IPC

java - IllegalStateException Java Google map 标记

android - 将变量传递给 ViewBinder

android - 如何在没有阴影的 AppBar 下面添加一个 TabView

android - 来自 Android 的 Firebase 复杂查询导致错误

android - 删除 fragment 中的溢出菜单 3 个点