You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android连续弹出两个MaterialDialog,最后一个无法用dismiss关闭求助

问题排查与解决

核心原因

你在两个弹窗的扩展函数中犯了同一个错误:

  1. 调用 build() 创建了一个 Dialog 实例,并为这个实例的按钮设置了点击监听
  2. 随后调用 Builder 的 show() 方法,这会重新创建一个全新的 Dialog 实例并显示
  3. 最终可见的弹窗是第二次创建的实例,而点击监听绑定在第一次创建的未显示实例上,导致调用 dismiss() 时无法作用于当前可见的弹窗

修复后的代码

修改两个扩展函数,确保只创建一次 Dialog 实例并完成所有配置后再显示:

fun MaterialDialog.Builder.alertChangedIcon(action: () -> Unit) {
    this.apply {
        customView(R.layout.change_icon_dialog, false)
        canceledOnTouchOutside(false)
    }.build().apply {
        val btnPosition = findViewById(R.id.yesBtnView) as Button
        btnPosition.setOnClickListener {
            dismiss()
            action.invoke()
        }
        show() // 显示当前配置好的Dialog实例
    }
}

fun MaterialDialog.Builder.alertIconInfoChanged(action: () -> Unit) {
    this.apply {
        customView(R.layout.title_subtitle_two_buttons_dialog_prime, false)
        canceledOnTouchOutside(false)
    }.build().apply {
        val title = findViewById(R.id.alertTitleView) as TextView
        val subtitle = findViewById(R.id.alertSubtitleView) as TextView
        val positiveButton = findViewById(R.id.yesBtnView) as Button
        val negativeButton = findViewById(R.id.noBtnView) as Button

        title.text = context.getString(R.string.happy_birthday)
        subtitle.text = context.getString(R.string.message_change_icon)
        
        negativeButton.apply {
            text = context.getString(R.string.ok)
            setOnClickListener {
                dismiss()
                action.invoke()
            }
        }
        
        // 隐藏确认按钮(若你的gone()不是扩展函数,替换为positiveButton.visibility = View.GONE)
        positiveButton.gone(true)
        
        show() // 显示当前配置好的Dialog实例
    }
}

额外说明

  • 原代码中 positiveButton.gone(false) 可能是笔误,若你想隐藏该按钮应传入 true
  • View 层的调用代码无需修改,保持原有逻辑即可

内容的提问来源于stack exchange,提问作者Gabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 15:57:15