如何通过setOnEditorActionListener解除android警报对话框?

时间:2016-07-05 06:20:33

标签: android alertdialog kotlin

有一个警告对话框,其中包含密码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(),然后在dialog.dismiss() doSomethingFunction()之后setOnEditorActionListener稍后解散(附后如下),但它没有效果。按下返回键后如何关闭此对话框?

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

3 个答案:

答案 0 :(得分:2)

尝试将setPositiveButton()放在doSomethingFunction()的位置

答案 1 :(得分:1)

拉姆的评论激发了我的灵感。由于我已经在单击正面按钮时已经定义了动作,我只是在声明中从构建器获取对话框,然后只需在正面按钮上调用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
}) 

答案 2 :(得分:0)

嗨,请在调用doSomthingFunction()后解除对话。