Android Kotlin - 如何将命名函数传递给另一个函数中的 DialogInterface.OnClickListener 参数?

Android Kotlin - How to pass a named function to DialogInterface.OnClickListener parameter in another function?

这是我的函数声明,

fun MyDialog(ctx: Context, msg: String, yestext: String = "", OnYes: DialogInterface.OnClickListener? = null): AlertDialog

fun MyClickListener(){}

如何将 MyClickListener 传递到 MyDialog?

MyDialog(context, "Delete data", "Yes", MyClickListener) 显示类型不匹配。

在DialogInterface.class

  public interface OnClickListener {
    void onClick(DialogInterface var1, int var2);
  }

您需要 DialogInterface.OnClickListener 的实现才能将其传递给它。

喜欢:

class MyClickListener : DialogInterface.OnClickListener {
    override fun onClick(var1: DialogInterface, var2: Int) {/* Code */}
}

// then call the constructor.
MyDialog(ctx, "", "", MyClickListener())

但这确实不是最干净的方式。就像 java 一样,您可以在 Kotlin 1.4.

中进行 SAM 转换
// inline implementation of DialogInterface.OnClickListener using SAM conversion
MyDialog(ctx, "", "") {/* Code */}

如果需要,您可以将 SAM 转换提取到适合您的用例的函数中。

fun MyClickListener() =
    DialogInterface.OnClickListener { /* Code */ }

//Now call like this
MyDialog(ctx, "", "", MyClickListener())