我正在try 阻止自动取消siteListFragment.kt中Else语句中的对话,但尽管我进行了努力,对话框还是自动取消了.

以下是我的代码: SiteListFragment.kt

override fun showAddSiteDialog() {
        val view: View = LayoutInflater.from(context).inflate(R.layout.dialog_site_add, null)
        DialogService.showWithView(
            requireContext(),
            DialogService.DialogType.INFO,
            false,
            getString(R.string.add_site),
            view,
            null,
            DialogService.TextWithCallback(getString(R.string.dialog_negative_cancel)){
                DialogService.dismiss()
            },
            DialogService.TextWithCallback(getString(R.string.dialog_positive_add)){
                GlobalScope.launch {
                    val editText = view.findViewById<EditText>(R.id.site_name_add)

                    val enteredText = editText.text.toString()
                    withContext(Dispatchers.Main) {
                        if (siteListPresenter.addSite(enteredText)) {
                            DialogService.dismiss()
                        } 
                        
                        //here
                        else {
                            editText.error = getString(R.string.network_update_error_empty_name_message)
                        }
                    }
                }
            }
        )
    }

DialogService.kt

    private var dialog: AlertDialog? = null
    var builder:  AlertDialog.Builder? = null

private fun create(
        context: Context,
        dialogType: DialogType,
        cancelable: Boolean,
        title: String,
        message: String?
        ) {
        builder = AlertDialog.Builder(context, R.style.CreativePodDialog)
        dialog = builder!!.create()
        builder!!.apply {
            setTitle(title)
            setIcon(getIcon(dialogType))

            if (message != null && message != "") setMessage(message)
            setCancelable(cancelable)
        }
    }

fun showWithView(
        context: Context,
        dialogType: DialogType,
        cancelable: Boolean,
        title: String,
        view: View? = null,
        negativeButton: TextWithCallback?,
        neutralButton: TextWithCallback?,
        positiveButton: TextWithCallback?,
    ) {
        create(context, dialogType, cancelable, title, null)

        builder!!.apply {
            setView(view)
            if (positiveButton != null)
                setPositiveButton(positiveButton.text) { _, _ ->
                    positiveButton.callback.invoke()
                }
            if (negativeButton != null)
                setNegativeButton(negativeButton.text) { _, _ ->
                    negativeButton.callback.invoke()
                }
            if (neutralButton != null)
                setNeutralButton(neutralButton.text) { _, _ ->
                    neutralButton.callback.invoke()
                }
        }.show()
    }

我已经try 将对话框设置为不可取消,这允许您在对话框外按下,但不会使其关闭,但不会影响按钮.我还try 将对话框肯定按钮回调设置为NULL,默认设置为Dismising.任何帮助都将不胜感激.

推荐答案

默认情况下,AlertDialogView.onClickListener,当用户单击正或负按钮时,会显示automatically dismiss个对话框.

为了防止这种情况发生,你必须亲自给听众打override分.

val btPositive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
btPositive.setOnClickListener {
    // do something here
    // dialog won't be dismissed now!
}

您可以在DialogService.TextWithCallback函数中传递null回调以使其按预期工作.

Android相关问答推荐

如何使用Jetpack Compose实现此底表?

StateFlow和LazyColumn重组

为什么我有多个Player实例?

在柯特林连续测量网速

在更改MuableState的值后,Android API 26(Oreo)上的Composable不能重新组合

如何在Android Studio中禁用文件中的Github用户名引用?

当 EditText 用于在 android studio 中将字符串发送到 firebase 时,仅允许安全调用错误

在 react native 中设置 react-native-paper 组件的样式

为什么我的应用程序使用这些信息?

如果 auth 失败,如何显示 toast jetpack compose firebase if else @Composable 调用只能在 @Composable 函数的上下文中发生

Jetpack Compose UI - 在 AlertDialog 中单击时按钮宽度会发生变化

在移动设备上看到时如何增加 PasswordField 文本?

Jetpack 组合千位分隔符视觉转换,也适用于小数

android xml底部空间大

react 从输入中找到路径'lib/arm64-v8a/libfbjni.so'的本机2个文件

Compose `Icons.Outlined.Star` 没有概述

房间创建三四表关系

更改 Android SDK 版本 33 后建议在 xml 布局文件中不起作用

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时

如何从构建的流对象中发出值