可以用 lambda 替换 Listener 是啥意思?
Posted
技术标签:
【中文标题】可以用 lambda 替换 Listener 是啥意思?【英文标题】:What does it mean that a Listener can be replaced with lambda?可以用 lambda 替换 Listener 是什么意思? 【发布时间】:2015-08-25 11:33:18 【问题描述】:我已经实现了一个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
【问题讨论】:
你能用这个添加你的代码的一部分吗? 你编译的是哪个版本的android? 【参考方案1】:这意味着你可以缩短你的代码。
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。
希望这能回答你的问题。
【讨论】:
请记住 lambda 是 Java 8 的特性,Android 不支持它。如果您喜欢此功能,请使用 retrolambda - github.com/evant/gradle-retrolambda Android 支持@rwojcik Lambda @Strider 如果我想在监听器中添加另一个方法会发生什么?怎么写? Android N 开始支持Java 8,所以Lambda
现在正式支持了。
而且你不需要为点击监听器导入“android.view.View”或“android.view.View.OnClickListener”。【参考方案2】:
就这么简单:
button.setOnClickListener(view -> username = textView.getText());
【讨论】:
@M Hornbacher 是的【参考方案3】:用 lambda 表达式替换经典的新 DialogInterface.OnClickListener() 实现就足够了
builder.setPositiveButton("resourceId", ((DialogInterface dialog, int which) ->
// do something here
));
它只是采用 onClick 事件参数。
【讨论】:
以上是关于可以用 lambda 替换 Listener 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
用 cloudformation 替换 terraform 部署的 lambda