我有一个函数,该函数具有另一个函数作为参数,我想将默认函数设置为我的函数参数。
这里我有这样的功能
public fun showDialog(context: Context, title: String = "-", mode: String = "info", type: String = "info", onOk : (dialog: Dialog) -> Unit = { onClickOk(dialog)) }) {
val dialog = Dialog(context)
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog.setCancelable(false)
dialog.setContentView(R.layout.modal_dialog)
dialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.dialogText.text = title
if (mode.equals("dialog")) {
dialog.dialogYesNo.visibility = View.VISIBLE
dialog.optionOk.visibility = View.GONE
} else {
dialog.dialogYesNo.visibility = View.GONE
dialog.optionOk.visibility = View.VISIBLE
}
if (type.equals("success")) {
dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_success)
dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_success)
} else if (type.equals("fail")) {
dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_fail)
dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_fail)
} else {
dialog.optionOk.background = context.getDrawable(R.drawable.btn_rounded_primary)
dialog.dialogAlert.background = context.getDrawable(R.drawable.dialog_alert_info)
}
dialog.optionOk.setOnClickListener{
onOk(dialog)
}
dialog.show()
}
这里是我的onClickOk函数
public fun onClickOk (dialog: Dialog){
dialog.hide()
}
我作为参数的功能在以下代码中:
onOk : (dialog: Dialog) -> Unit
在这段代码中,我给函数参数提供了默认参数
onOk : (dialog: Dialog) -> Unit = { onClickOk(dialog)) }
但是我无法将onOk
函数上的“ dialog”参数传递给onClickOk
函数
这是我的错误代码屏幕截图
有人可以帮我吗?谢谢
答案 0 :(得分:0)
您可以传递方法参考:
onOk : (dialog: Dialog) -> Unit = this::onClickOk
答案 1 :(得分:0)
函数类型表示法中的名称仅出于文档目的,您将无法在lambda的正文中使用它们:
函数类型表示法可以选择包含函数参数的名称:(x:Int,y:Int)->点。这些名称可用于记录参数的含义
如果lambda仅具有一个参数,则可以使用隐式it
参数来引用该参数:
onOk: (dialog: Dialog) -> Unit = { onClickOk(it) }
如果有两个或多个参数,则必须在lambda的主体内声明它们:
onOk: (Dialog, String) -> Unit = { dialog, title -> onClickOk(dialog, title) }