Lambda作为Android onClicklistener中的函数参数

时间:2019-08-15 07:54:04

标签: android kotlin lambda onclicklistener

我正在为Android应用程序(API 29)构建自定义样式的Snackbar消息(https://github.com/Pradyuman7/ChocoBar),我想通过在MainActivity中使用1个全局函数来调用该消息。在我的全局功能下面:

fun showStyledSnackbarMessage(view: View, msg: String, msgAction: String, durationMs: Int,  icon: Int, action: (() -> Unit)) {

     ChocoBar.builder()
                    .setView(view)                    
                    .setText(msg)
                    .setActionText(msgAction)
                    .setDuration(durationMs)
                    .setIcon(icon)
                    .setActionClickListener { action } // the code to execute
                    .build()
                    .show()
}

我的函数将lambda作为最后一个参数(“ action”)。 Android Studio告诉我,“ action”参数未使用。 .setActionClickListener的定义如下:

public Builder setActionClickListener(View.OnClickListener listener) {
            this.actionClickListener = listener;
            return this;

我无法理解为什么我的lambda无法正常工作。当我单击小吃店的操作按钮时,什么也没有发生。如果我在不使用全局函数的情况下使用此代码,则onClickListener确实可以工作。

已经使用匿名类在没有lambda的情况下进行了尝试,结果相同。

1 个答案:

答案 0 :(得分:1)

您必须调用您的操作

.setActionClickListener { action() }