为什么当我单击 AlertDialog 边界之外或单击 Compose 中的按钮时,AlertDialog 没有关闭

问题描述 投票:0回答:1
@Composable
fun ShowDialog(
    title: String,
    text: String,
    onDismiss: () -> Unit = {}
) {
    AlertDialog(
        onDismissRequest = onDismiss,
        title = { Text(text = title) },
        text = { Text(text = text) },
        confirmButton = {
            Button(
                onClick = onDismiss
            ) {
                Text(text = "OK")
            }
        },
        dismissButton = {
            Button(
                onClick = onDismiss
            ) {
                Text(text = "Cancel")
            }
        }
    )
}

当我单击按钮或对话框外部时,没有任何反应。为什么以及如何解决这个问题?我有一个解决方案,我使用 isShowingDialog 手动隐藏,但在我看来,这是一个拐杖,这个组件应该在内部而不是手动处理这个问题。

android kotlin android-jetpack-compose android-alertdialog
1个回答
0
投票

这就是 Compose 的工作原理。

AlertDialog
是一个简单的可组合函数。如果它存在于撰写树中,则显示它,否则不显示。因此,您需要一个状态变量来指示是否应显示或跳过对话框:

var isShowingDialog by rememberSaveable { mutableStateOf(false) }

if (isShowingDialog)
    ShowDialog(
        ...
        onDismiss = { isShowingDialog = false },
    )

如果要显示对话框,请设置

isShowingDialog = true
(例如,在按钮的回调中)。如果将其设置为 false,则隐藏。

另请参阅文档及其示例。

© www.soinside.com 2019 - 2024. All rights reserved.