当前位置: 首页 > 知识库问答 >
问题:

我怎么能把它变成兰姆达?

梁兴文
2023-03-14

Android Studio给了我一个弯弯曲曲的说法,我应该/可以把它变成一个lambda。我刚回到我的Android系统。

popup.setOnMenuItemClickListener(object : PopupMenu.OnMenuItemClickListener {
    override fun onMenuItemClick(item: MenuItem): Boolean {
        if (item.itemId === R.id.action_vitals) {
            val vitalsIntent = Intent(this@DashboardActivity, VitalsActivity::class.java)
            vitalsIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
            startActivity(vitalsIntent)
        }
        if (item.itemId === R.id.action_devices) {
            val devicesIntent = Intent(this@DashboardActivity, DevicesActivity::class.java)
            devicesIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
            startActivity(devicesIntent)
        }
        return false
    }
})

这是弯曲的“对象:PopupMenu.OnMenuItemClickListener”

共有1个答案

郎喜
2023-03-14

有一些评论和答案建议在IntelliJ/Android Studio中使用alt+enter,这将为您处理将代码转换为Lambda的问题。然而,也许有必要解释一下为什么它会向你提出这些建议。

lambda是一个没有声明的函数,例如fun someFunction(),而是作为参数立即传递给另一个函数。然后,这个lambda将由应用程序其他地方的一些其他代码执行。Lambda本质上是一个速记函数,例如:

val lambda: () -> Unit = {
    // Some code could go inside this Lambda here    
}

这里对您来说一个重要的概念是SAM(Single Abstract Method)类型。这只是指定义需要实现的单个抽象函数的接口。在您的示例中,PopupMenu.OnMenuItemClickListener是一个Java接口,它具有一个抽象方法void onMenuItemClick(MenuItem item)。SAM类型可以用速记法写成,lambda的主体变成抽象函数的主体。

    enterpopup.setOnMenuItemClickListener {
        if (item.itemId === R.id.action_vitals) {
                val vitalsIntent = Intent(this@DashboardActivity, VitalsActivity::class.java)
                vitalsIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
                startActivity(vitalsIntent)
            }
            if (item.itemId === R.id.action_devices) {
                val devicesIntent = Intent(this@DashboardActivity, DevicesActivity::class.java)
                devicesIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
                startActivity(devicesIntent)
            }
            return false
    }
 类似资料:
  • 谁能告诉我从.p12文件中提取/转换证书.crt文件的正确方法/命令吗?在我搜查之后。我找到了将.pem转换为.crt的方法。但未找到.p12到.crt。

  • 静态编程语言中的属性和开放属性有什么区别?下面的代码抱怨我声明setter私有,Intellij说开放属性不允许私有setter。什么是开放属性? 为什么上面的代码无效,而这个代码有效? 编辑:我使用的是spring-allopen插件,将类显式标记为open并没有什么不同。

  • 问题内容: 我有一个WSDL文件,我需要将其转换为Java,为此,我使用下面链接中的分步过程 http://axis.apache.org/axis2/java/core/tools/eclipse/wsdl2java- plugin.html 就像将axis2 codegen jar文件添加到eclipse文件夹中的dropins文件夹中并重新启动eclipse一样,但是我在eclipse ID

  • 问题内容: 我正在开发一个Web应用程序,其中将在客户端和服务器端之间传输数据。 我已经知道JavaScript int!= Java int。因为,Java int不能为null,对。现在这是我面临的问题。 我将Java int变量更改为Integer。 我的问题在这里: 我不能在这里使用Integer变量。我尝试过, 但这会使事情变得更复杂。我们还有其他 转换方法或转换技术吗? 任何修复都会更

  • 问题内容: 如果我有: 我需要 PHP是否为此提供功能? 问题答案: 尝试以下尺寸: 输出: 这实现了以下规则: 以小写字母开头的序列后必须跟小写字母和数字; 以大写字母开头的序列后面可以是: 一个或多个大写字母和数字(后跟字符串的结尾或大写字母,后跟小写字母或数字,即下一个序列的开头);要么 一个或多个小写字母或数字。

  • 问题内容: 我有一个相当于毫秒的字符串。我尝试使用哪个给出毫秒,包括当前日期。我只需要String表示形式到毫秒。我是否必须编写自定义方法,该方法将拆分并计算毫秒?还是有其他方法可以做到这一点?谢谢。 我尝试如下: 问题答案: 您可以用来做。您只需要知道两件事。 所有日期均以UTC内部表示 返回自1970-01-01 00:00:00 UTC以来的毫秒数。