Добавить необязательный параметр в класс Android Kotlin - PullRequest
0 голосов
/ 07 июня 2019

Я создал расширение DialogFragment():

class AlertDialogFragment(context: Context, val positiveButtonText: String, val positiveButtonListener: DialogInterface.OnClickListener,
                          val negativeButtonText: String, val negativeButtonListener: DialogInterface.OnClickListener,  neutralButtonText: String, neutralButtonListener: DialogInterface.OnClickListener) : DialogFragment() {

, однако я хочу, чтобы последние 2 параметра были необязательными.

Как мне этого добиться?

Я не могу установить neutralButtonListener: DialogInterface.OnClickListener = null, потому что DialogInterface.OnClickListener не является нулевым типом.

Ответы [ 4 ]

2 голосов
/ 07 июня 2019

Вы можете попробовать это

class AlertDialogFragment(context: Context, val positiveButtonText: String, val positiveButtonListener: DialogInterface.OnClickListener,
                          val negativeButtonText: String, val negativeButtonListener: DialogInterface.OnClickListener,  neutralButtonText: String = "", neutralButtonListener: DialogInterface.OnClickListener = OnClickListener {}) : DialogFragment() {
1 голос
/ 07 июня 2019

Параметры по умолчанию для спасения.

class AlertDialogFragment(
    context: Context,
    val positiveButtonText: String,
    val positiveButtonListener: DialogInterface.OnClickListener,
    val negativeButtonText: String,
    val negativeButtonListener: DialogInterface.OnClickListener, 
    neutralButtonText: String = "",
    neutralButtonListener: DialogInterface.OnClickListener = OnClickListener {}
) : DialogFragment()

По сути, Kotlin будет генерировать несколько методов для каждой возможной комбинации параметров.

Если также может быть лучше включить аннотацию @JvmOverloardв конструкторе, чтобы разрешить то же самое в Java.

1 голос
/ 07 июня 2019

Проверьте это

class AlertDialogFragment(context: Context, val positiveButtonText: String, val positiveButtonListener: DialogInterface.OnClickListener,
                      val negativeButtonText: String, val negativeButtonListener: DialogInterface.OnClickListener, neutralButtonText: String = "", neutralButtonListener: DialogInterface.OnClickListener?=null) : DialogFragment() { }
1 голос
/ 07 июня 2019

Как правило, вы предоставляете реализации без опций или с нулевым значением, например

neutralButtonText: String = ""
neutralButtonListener: OnClickListener = OnClickListener {}

Но в вашем случае вы не должны использовать параметры конструктора вообще!

Фрагменты могут быть воссозданы из системы и требуют конструктора по умолчанию.

Вам необходимо связаться с activity или parentFragment, позволив им реализовать требуемый интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...