android – lambda表达式未使用

在使用 Android的Switch时,我附加了一个setonCheckedchangelistener并得到了这个警告

The lambda expression is unused. If you mean a block,you can use ‘run {…}’

这里是代码片段:

switchAction.setonCheckedchangelistener({
    _,isChecked ->
    {
        preferences.userStatus = isChecked
        switchToggleVisibility(isChecked)
        if (isChecked) {
            fetchStats()
            getorders()
        } else {
            releaSEOrder()
        }
    }
})

使用run确实可以修复此警告,但是有人知道这背后的原因吗? lambda表达式如何未使用?

解决方法

你将Java的lambda表示法与Kotlin的lambda表示法混合,创建一个lambda,在这种情况下返回另一个嵌套的lambda.正确和惯用的语法如下所示:
switchAction.setonCheckedchangelistener { _,isChecked ->
    preferences.userStatus = isChecked
    switchToggleVisibility(isChecked)
    if (isChecked) {
        fetchStats()
        getorders()
    } else {
        releaSEOrder()
    }
}

消除所有噪音,正常的lambda看起来像这样:

{ arg1,arg2 -> returnValue }

你这样做了:

{ arg1,arg2 -> { returnValue } }

哪个也可以这样写:

{ arg1,arg2 -> { -> returnValue } }

这种表示法使得lambda不返回返回值更加清楚,但返回另一个没有返回返回值的参数的lambda.

通常,这会被编译器捕获为错误的返回类型,但在您的情况下,不使用lambda的返回值.所以,你只是创建内部lambda而不返回或运行它,这就是你得到警告的原因.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...