在 Kotlin 中创建带有回调的自定义对话框

Create a custom dialog with callback in Kotlin

我尝试创建一个自定义对话框并使用回调调用它。也许这不是最佳实践,但我不知道如何更好地解决它。这是对话框:

private fun showDialog(header: String, message: String, callback: Callback? = null) {
    val dialog = Dialog(this)
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
    dialog.setCancelable(false)
    dialog.setContentView(R.layout.alert_layout)
    val body = dialog.findViewById(R.id.text) as TextView
    val title = dialog.findViewById(R.id.title) as TextView
    body.text = message
    title.text = header
    val yesBtn = dialog.findViewById(R.id.button) as Button
    //val noBtn = dialog.findViewById(R.id.noBtn) as TextView
    yesBtn.setOnClickListener {
        dialog.dismiss()
        if(callback != null) {
            callback // Here i want execute the callback
        }
    }
    //noBtn.setOnClickListener { dialog.dismiss() }
    dialog.show()
}

这是我的回调以及我调用对话框的方式:

val callback: Callback = object:Callback {
   fun run() {
      println("Callback executed")
   }
}
showDialog("My Title", "My Text", callback)

我的意见是像

这样的对象调用回调
callback.run()

我的问题:

我的代码应该工作吗?我该如何调用我的回调,因为 callback.run() 似乎不工作。

您可以传递 Kotlin lambda 函数而不是 Callback

private fun showDialog(header: String, message: String, callback: (() -> Unit)? = null) {
    ...
    yesBtn.setOnClickListener {
        callback?.invoke() // Call that function
        dismiss()
    }
    ...
}

您可以使用尾随 lambda 语法将此 lambda 传递给 showDialog

showDialog("My Title", "My Text") {
    println("Callback executed")
}