【问题标题】:Use lambda expression to create an AlertDialog使用 lambda 表达式创建 AlertDialog
【发布时间】:2015-09-17 05:16:30
【问题描述】:

我的 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。没有更多或更少。在查看 several examples 之后。我试过这样的事情:

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

还有这些:

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

其中的错误:

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

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

【问题讨论】:

标签: android lambda java-8 android-alertdialog retrolambda


【解决方案1】:

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

new AlertDialog.Builder(this).setPositiveButton("Okay", 
                                  (dialog, which) -> dialog.cancel());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多