簡體   English   中英

在 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")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM