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())
这是我的函数声明,
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())