向Android Kotlin类添加可选参数

时间:2019-06-07 06:57:31

标签: android kotlin

我创建了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 个答案:

答案 0 :(得分:2)

您可以尝试

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 :(得分:1)

通常,您会提供无操作或空值实现,例如

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

但是在您的用例中,您绝对不能使用构造函数参数!

可以从系统重新创建片段,并且需要默认的构造函数。

您需要通过communicate with the activity or parentFragment来实现所需的接口。

答案 2 :(得分:1)

检查一下

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() { }

答案 3 :(得分:1)

救援的默认参数。

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中使用相同的内容,可能还会更好。