Android Kotlin - Как передать именованную функцию в параметр DialogInterface.OnClickListener в другой функции? - PullRequest
2 голосов
/ 09 мая 2020

Это объявление моей функции,

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

fun MyClickListener(){}

Как передать MyClickListener в MyDialog?

MyDialog (контекст, «Удалить данные», «Да», MyClickListener) показал несоответствие типа .

В DialogInterface.class

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

1 Ответ

1 голос
/ 09 мая 2020

Вам нужна реализация DialogInterface.OnClickListener, чтобы передать его ему.

Например:

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

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

Но на самом деле это не самый чистый путь дальше. Так же, как java, вы можете преобразовывать SAM в Kotlin 1.4 .

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

И если хотите, вы можете извлечь преобразование SAM в функцию, которая подходит для вашего случая использования. .

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

//Now call like this
MyDialog(ctx, "", "", MyClickListener())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...