【问题标题】:How to dismiss android alert dialog itself via setOnEditorActionListener?如何通过 setOnEditorActionListener 关闭 android 警报对话框本身?
【发布时间】:2016-07-05 06:20:33
【问题描述】:

有一个警告对话框,其中包含密码EditText,我正在尝试执行与按下键盘 RETURN 按钮后按下肯定按钮相同的操作。

在我的 MainActivity 中:

fun enterPwd() {
    val builder = android.app.AlertDialog.Builder(this)
    val password = EditText(this)

    // some layout attributes about password are omitted

    password.imeOptions = EditorInfo.IME_ACTION_GO
    password.setOnEditorActionListener({
        if(id == EditorInfo.IME_ACTION_GO) { v, id, event ->
            doSomthingFunction()
        }
        false
    }) 
    builder.setView(password).setMessage("message")
                .setPositiveButton("confirm", { doSomethingFunction() })
                .setNegativeButton("cancel", { dialog, i -> }).show()
}

setPositiveButton 中的后者 doSomethingFunction() 中,构建器将在按下按钮后自动关闭。但是在上一个中,对话框仍然存在。我曾尝试通过dialog = builder.show(),然后在doSomethingFunction() 之后通过dialog.dismiss() 关闭setOnEditorActionListener(如下所示),但没有效果。按下回车键后如何关闭此对话框?

val dialog = builder.show()
password.setOnEditorActionListener({
    if(id == EditorInfo.IME_ACTION_GO) { v, id, event ->
        doSomthingFunction()
        dialog.dismiss()
    }
    false
}) 

【问题讨论】:

  • 我们的警报对话框中有多少编辑文本?
  • 只有一个,password。这也是我添加到构建器中的唯一视图
  • 尝试用 setPositiveButton() 代替 doSomethingFunction()。
  • 试试Dialog.this.dismiss()
  • 惠特尼有用吗?

标签: android android-alertdialog kotlin


【解决方案1】:

尝试用 setPositiveButton() 代替 doSomethingFunction()

【讨论】:

  • 不太清楚你的意思。我试图在原行doSomethingFunction() 中替换builder.setPositiveButton("confirm", { d, i -> doSomethingFunction() }),但没有任何反应。我认为setPositiveButton() 只是进行了设置,所以正面按钮根本没有按下。
  • 所以,以编程方式创建一个按钮并在单击按钮时编写代码,然后隐藏该按钮,现在将 button.perform click 放置在 doSomethingFunction 的位置。
  • 它会帮助你...@whitney
  • 感谢@Ram 启发我解决这个问题。最后我对代码做了一些修改,但是思路还是差不多的。
【解决方案2】:

Ram 的评论启发了我。由于我已经定义了单击肯定按钮时的操作,因此我只是在声明时从构建器中获取对话框,然后只需在肯定按钮上调用performClick(),一切正常。

即:

val dialog = builder.setView(password).setMessage("message")
            .setPositiveButton("confirm", { doSomethingFunction() })
            .setNegativeButton("cancel", { dialog, i -> }).show()

password.setOnEditorActionListener({
    if(id == EditorInfo.IME_ACTION_GO) { v, id, event ->
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick()        
    }
    false
}) 

【讨论】:

    【解决方案3】:

    您好,请在调用 doSomthingFunction() 后关闭对话框。

    【讨论】:

    • 我试过了,没有用。这就是我来这里寻求答案的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多