使用lambda表达式创建AlertDialog

时间:2015-09-17 05:16:31

标签: android lambda java-8 alertdialog retrolambda

我的Android工作室设置如下:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<div class="container">

  <h1>Bootstrap popover Example</h1>

  <div>

    <input type="password" id="password1" placeholder="password">

  </div>

</div>

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

当我执行以下代码时:

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

IDE变灰了 alertDialogBuilder.setPositiveButton("Okay", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); 告诉我它可以用lambda替换。没有更多或更少。在研究https://www.dropbox.com/s/5w6etov45huj3gy/Screenshot%202015-09-11%2014.06.56.png?dl=0 several之后。我尝试过这样的事情:

new DialogInterface.OnClickListener()

还有这些:

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

错误之中:

  

错误:(99,64)错误:不兼容的类型:DialogInterface不是功能接口   在接口DialogInterface

中找到多个非重写抽象方法

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

1 个答案:

答案 0 :(得分:10)

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

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