我正在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相关问答推荐

显示本地房间数据库中未保存的项目的动态列表

如何使用进度条和返回函数进行API调用,同时在Android上使用Kotlin保持高效?

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

弹出导航堆栈后,Compose 无法访问 Hilt View Model

使用lazyColumn迁移paging3的旧代码

Android Studio Relay插件(版本0.3.07)错误

面向Jetpack Compose的可组合放置问题

块不起作用,出现 "只有安全的 (?.)... " 错误

如何避免多次调用 Jetpack Compose 的 onClick 回调

当父布局的背景为浅色时,Android ProgressBar 背景 colored颜色 变为灰色

如何在 Jetpack Compose 中对数据类进行 Parcelize

CoroutineScope 与挂起函数

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

为什么项目捕获对象给我在 Compose 中找不到参考

WindowManager 内的 RecyclerView 不更新

compose :为什么以记住启动的列表触发方式与快照不同

在delphi中将Jnet_uri转换为Tbitmap

在 Android Studio 中保存数据

为什么inflate 和root 会警告我?

Android Studio 的项目 gradle 文件改变了?