可以用 lambda 替换 Listener 是什么意思?

What does it mean that a Listener can be replaced with lambda?

我已经实现了一个 AlertDialog,带有正常的负按钮点击侦听器和正按钮点击侦听器。

当我打电话给 new DialogInterface.OnClickListener() 时,它显示了一条建议:Anonymous new DialogInterface.OnClickListener() can be replaced with lambda。我知道这不是错误或大问题,但这个建议到底是什么,我该怎么办?

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositiveButton("Text", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // do something here
    }
});

Android Studio V1.2.1.1 compileSdkVersion 22 buildToolsVersion "22.0.0" minSdkVersion 14 targetSdkVersion 22

这意味着您可以缩短代码。

onClickListener() 没有 lambda 的例子:

mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // do something here
    }
});

可以用 lambda:

重写
mButton.setOnClickListener((View v) -> {
    // do something here
});

代码相同。这在使用大量侦听器或编写没有 IDE 的代码时很有用。 有关详细信息,请查看 this

希望这能回答您的问题。

就这么简单:

button.setOnClickListener(view -> username = textView.getText());

要用 lambda 表达式替换经典的新 DialogInterface.OnClickListener() 实现,使用以下内容就足够了

 builder.setPositiveButton("resourceId", ((DialogInterface dialog, int which) -> {
      // do something here
 }));

它只是采用 onClick 事件参数。