3

我的 Android 工作室设置了这些:

    classpath "me.tatarka:gradle-retrolambda:3.2.2"
    classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'

我正在尝试使用 lambdas 来知道我能做什么。

当我执行以下代码时:

    alertDialogBuilder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

IDE 显示灰色,new DialogInterface.OnClickListener()告诉我它可以用 lambda 替换。没有更多或更少。在研究了几个 例子之后。我试过这样的事情:

    alertDialogBuilder.setPositiveButton("Okay", (DialogInterface dialog) -> {
            dialog.cancel();
    });

还有这些:

alertDialogBuilder.setNegativeButton((DialogInterface) d -> d.cancel());

其中的错误:

错误:(99, 64) 错误:不兼容的类型:DialogInterface 不是功能接口,在接口 DialogInterface 中找到多个非覆盖抽象方法

在这种情况下我应该如何使用 lambda?

4

1 回答 1

11

onClick接受两个参数,您的示例仅尝试显示一个。请务必which在您的 lambda 中包含该参数。

new AlertDialog.Builder(this).setPositiveButton("Okay", 
                                  (dialog, which) -> dialog.cancel());
于 2015-09-17T06:12:40.443 回答