首页 > 解决方案 > AlertDialog dialog.dismiss(), dialog.close() 不工作

问题描述

我必须在按钮中单击两次(任何:正面、中性和负面)才能关闭 AlertDialog。

import android.annotation.SuppressLint
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.view.KeyEvent
import android.view.View
import com.example.said.puntodeventa.R.layout.layout_addproduct

class someClass : AppCompatActivity() {

@SuppressLint("StringFormatInvalid")
private fun someDialog(){
AlertDialog.Builder(this).apply {
                setTitle("title")
                setMessage("message")
                setNegativeButton("No"){ dialog, which ->
                    anEditText.text.clear()
                    anEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setNeutralButton("Neutral"){ dialog, which ->
                    someEditText.text.clear()
                    someEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setPositiveButton("Yes") { dialog, which ->
                    addProduct()
                    dialog.cancel()
                    dialog.dismiss()
                }
                create()
                show()
            }
        }

private fun addProduct(){
        //some code working properly
    }
}

addProduct()并且.text.clear()工作完美,但 AlertDialog 在我第一次单击时不会关闭。

我试过只单独使用 with dialog.cancel()dialog.dismiss()但似乎没有任何效果,就像代码不存在一样。

我也尝试过导入android.app.AlertDialog,结果相同。

这是当我单击任何按钮时日志中的红色文本,无论是第一次(当 AlertDialog 没有关闭时)还是第二次(当它实际关闭时)。

05-19 16:42:34.543 24647-24647/com.example.name.appdemo E/ViewRootImpl: sendUserActionEvent() mView == null

谢谢

标签: androidkotlinandroid-alertdialog

解决方案


@Said:我复制了您的代码,它运行良好,只需单击 1 次即可关闭正面或负面按钮,所以我相信问题不在这部分。

private fun dialogCostPrice(){

    val dialogBuilder = AlertDialog.Builder(this)

    dialogBuilder.setTitle("Dialog Title")
    dialogBuilder.setMessage("Dialog Message")
    dialogBuilder.setPositiveButton("OK", { dialog, whichButton ->
        dialog.dismiss()
    })
    dialogBuilder.setNegativeButton("Cancel", { dialog, whichButton ->
        dialog.dismiss()
    })
    val b = dialogBuilder.create()
    b.show()
    }

推荐阅读