【问题标题】:Re-showing dialog after dissmiss关闭后重新显示对话框
【发布时间】:2017-08-27 23:29:17
【问题描述】:

如何在每次关闭后重新显示相同的对话框? 我的代码(在 Kotlin 中):

val alertDialog = AlertDialog.Builder(this)
alertDialog.setMessage(getString(R.string.alert_dialog_main_activity))
val editText = EditText(this)
editText.inputType = InputType.TYPE_CLASS_PHONE
alertDialog.run {
    setView(editText)
    setOnDismissListener { TODO( "Re-show dialog" }
    setPositiveButton("Done", { dialogInterface, i ->
        run {
            toast(editText.text.toString())
            PreferenceManager.getDefaultSharedPreferences(applicationContext).edit().putInt("phoneNumber", editText.text.toString().toInt()).commit()
            }
        })
    show()
}

答案也可以是 Java。

【问题讨论】:

  • 不允许关闭而不是重新打开它怎么办?你可以使用 show() 我打赌

标签: java android dialog kotlin listener


【解决方案1】:

最简单的方法可能是调用显示对话框的函数,如下所示:

    fun showDialog() {
        val alertDialog = AlertDialog.Builder(this)
        alertDialog.setMessage(getString(R.string.alert_dialog_main_activity))
        val editText = EditText(this)
        editText.inputType = InputType.TYPE_CLASS_PHONE
        alertDialog.run {
            setView(editText)
            setOnDismissListener {
                 showDialog() // recall the function
            }
            setPositiveButton("Done", { dialogInterface, i -> {
                    toast(editText.text.toString())
                    PreferenceManager.getDefaultSharedPreferences(applicationContext).edit().putInt("phoneNumber", editText.text.toString().toInt()).commit()
                    }
                })
            show()
        }
    }

【讨论】:

  • 那个崩溃的应用程序和堆栈跟踪,有消息说这个视图已经显示了
【解决方案2】:

试试这个:

AlertDialog.Builder(this).apply {
    setMessage(getString(R.string.alert_dialog_main_activity))
    setView(editText)
    setOnDismissListener {
        if(/*TODO validate phone number*/)
        (it as AlertDialog).show()
    }
    setPositiveButton("Done", { dialogInterface, i ->
        toast(editText.text.toString())
        PreferenceManager.getDefaultSharedPreferences(applicationContext).edit().putInt("phoneNumber", editText.text.toString().toInt()).commit()

    })
    show()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2011-07-10
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多