监听器可以替换为lambda

Kav*_*bhu 60 lambda android android-alertdialog

我已经实现了一个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
    }
});
Run Code Online (Sandbox Code Playgroud)

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

Str*_*der 109

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

onClickListener() 没有 lambda 的例子:

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

可以用 lambda 重写:

mButton.setOnClickListener((View v) -> {
    // do something here
});
Run Code Online (Sandbox Code Playgroud)

这是相同的代码.这在使用大量侦听器或在没有IDE的情况下编写代码时非常有用.有关详细信息,请检查此信息.

希望这能回答你的问题.

  • 请记住lambda是Java 8的功能,android不支持.如果你喜欢这个功能,请使用retrolambda - https://github.com/evant/gradle-retrolambda (8认同)
  • Android N开始支持Java 8,因此现在正式支持`Lambda`. (7认同)
  • @rwojcik Lambda在Android中受支持 (6认同)

LEM*_*ANE 6

就这么简单:

button.setOnClickListener(view -> username = textView.getText());
Run Code Online (Sandbox Code Playgroud)


Gab*_*rez 5

用 lambda 表达式替换经典的 new DialogInterface.OnClickListener() 实现就足够了

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

它只是采用 onClick 事件参数。