在 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")
}
我尝试创建一个自定义对话框并使用回调调用它。也许这不是最佳实践,但我不知道如何更好地解决它。这是对话框:
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")
}