[英]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")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.