可以用lambda代替侦听器是什么意思?


67

我已经实现了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


您可以使用此代码添加部分代码吗?
2015年

1
您针对哪个版本的android进行编译?
Blackbelt

Answers:


128

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

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编写代码时,此功能很有用。有关更多信息,请检查

希望这能回答您的问题。


8
请记住,lambda是Java 8功能,Android不支持。如果您喜欢此功能,请使用retrolambda-github.com/evant/gradle-retrolambda
rwojcik 2015年

7
@rwojcik LAMBDA采用的是Android支持
portfoliobuilder

@Strider如果我想在监听器中添加另一个方法,会发生什么?我该怎么写?
emaleavil

7
Android N开始支持Java 8,因此Lambda现已正式支持。
IronBlossom '16

而且,您无需为点击监听器导入“ android.view.View”或“ android.view.View.OnClickListener”。
Arash

5

就这么简单:

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

1
@M Hornbacher是
Mark

4

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

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

它只是采用onClick事件参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.