gpt4 book ai didi

android-studio - 有没有一种简单的方法可以使用 Android Studio 3.5.1 将 lambda 转换为 Kotlin 中的完整表达式?

转载 作者:行者123 更新时间:2023-12-03 17:47:36 25 4
gpt4 key购买 nike

popup.setOnMenuItemClickListener中的代码是lambda表达式,代码的作用是弹出一个菜单。

有时很难理解 lambda 表达式。

有没有一种简单的方法可以将 lambda 转换为完整的表达式?有一些实用程序可以做到这一点吗?

代码

 private fun showPopup(v: View, mContext: Context) {
val popup = PopupMenu(mContext, v)
popup.inflate(R.menu.menu_popup_more)

popup.setOnMenuItemClickListener {
when (it.itemId) {
R.id.MenuMoreAbout->{
requireActivity().openActivity<UIAbout>()
}
}
true // Why do I need add 'true'
}
popup.show()
}

最佳答案

Is there a simple way to convert a lambda into a full expression ?

是的,有!首先将光标定位在第一个花括号上

                     Position your cursor at this character
|
v

popup.setOnMenuItemClickListener {
when (it.itemId) {
R.id.MenuMoreAbout->{
requireActivity().openActivity<UIAbout>()
}
}
true // Why do I need add 'true'
}

然后键入 Alt+Enter(Option+Enter 对于 Mac)调出 快速修复 菜单。选择转换为匿名函数。这会将代码变成以下内容:

popup.setOnMenuItemClickListener(fun(it: MenuItem): Boolean {
when (it.itemId) {
R.id.MenuMoreAbout -> {
requireActivity().openActivity<UIAbout>()
}
}
return true
})

对于不熟悉 Kotlin 语法的人来说,这更清楚。

可以看出,您的 true 表达式是 lambda 的返回值。在 Kotlin 中,lambda 的返回值是 lambda 中最后一个表达式的值。如果您愿意,可以通过替换

true  // Why do I need add 'true'

return@setOnMenuItemClickListener true

在您的原始代码中。请参阅 Return at Labels 的官方文档获取更多信息。

必须返回 Boolean 的原因是因为 lambda 用于以下 Java 接口(interface),它是 setOnMenuItemClickListener(OnMenuItemClickListener) 的参数类型

    public interface OnMenuItemClickListener {
boolean onMenuItemClick(MenuItem item);
}

如您所见,onMenuItemClick(MenuItem) 返回一个 boolean(在 Kotlin 中被转换为 Boolean)。所以 lambda 还必须返回一个 Boolean

关于android-studio - 有没有一种简单的方法可以使用 Android Studio 3.5.1 将 lambda 转换为 Kotlin 中的完整表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58253483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com