Function 尝试在Kotlin中传递函数参数

Function 尝试在Kotlin中传递函数参数,function,kotlin,lambda,parameters,field,Function,Kotlin,Lambda,Parameters,Field,我有一个功能: fun test(){ Timber.d("Button Clicked") } 我试图把这个函数传递给一个片段。这是我片段中的字段 class MyFragment(val layout: Int) : Fragment() { var clickEvent1: (() -> Unit)? = null } override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

我有一个功能:

fun test(){
    Timber.d("Button Clicked")
}
我试图把这个函数传递给一个片段。这是我片段中的字段

class MyFragment(val layout: Int) : Fragment() {
     var clickEvent1: (() -> Unit)? = null
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     dialog_option_1.setOnClickListener { clickEvent1 }
}
这就是我在开始片段事务之前设置这个字段的方式

fragment.clickEvent1 = {test()}
我的目标是在我的片段中单击按钮来运行这个函数

class MyFragment(val layout: Int) : Fragment() {
     var clickEvent1: (() -> Unit)? = null
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
     dialog_option_1.setOnClickListener { clickEvent1 }
}
我这样做的方式有一个问题,因为“test”函数没有运行。有人能给我指出正确的方向吗?谢谢使用

dialog_option_1.setOnClickListener(clickEvent1)
您需要将lambda本身传递给方法,因此应该使用()括号而不是{},这将创建一个新的lambda,它在您的情况下几乎不起任何作用

dialog_option_1.setOnClickListener { clickEvent1() }

如果你想那样做的话。

很遗憾,这是行不通的。setOnClickListener()需要View.OnClickListener。clickEvent1是一个(()->单位):(然后将clickEvent1定义为(视图)->Unit(onClick方法接收视图参数),或者您可以使用SAM构造函数:
val clickEvent=View.OnClickListener{View->test()}
好的,我用
dialog\u option\u 1.setOnClickListener{clickEvent1?.let{it()}
,您的sulotion似乎工作得很好。非常感谢!您可以将
clickEvent1?替换为
clickEvent1?.invoke()
。这是否回答了您的问题?