预期的类型布尔值:弹出式菜单的值

我正在尝试做一个弹出菜单,并根据哪个项目被点击发生的事情。 菜单项的点击监听器需要一个返回类型为Boolean的类型。 我已经给它一个返回类型,但它仍然全部显示为“期望值类型布尔值”的消息。 有人能告诉我我在这里有什么错吗? (我知道我没有做菜单点击做任何事情)

val menuButton = findViewById<Button>(R.id.categoryImageButton) menuButton.setOnClickListener(View.OnClickListener { fun onClick(view: View){ val popup = PopupMenu(this,menuButton) popup.menuInflater.inflate(R.menu.popup_menu, popup.menu) popup.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { **fun onMenuItemClick(item: MenuItem): Boolean { when (item.itemId) { R.id.techItem -> { return true } R.id.clothItem -> { return true } else -> return false } }** }) } }) 

One Solution collect form web for “预期的类型布尔值:弹出式菜单的值”

你现在正在对象表达式和SAM构造函数之间的某处。 这里有一些修复它的选项。

您可以使用完整的对象表达式语法,如下所示:

 popup.setOnMenuItemClickListener(object: PopupMenu.OnMenuItemClickListener { override fun onMenuItemClick(item: MenuItem): Boolean { when (item.itemId) { R.id.techItem -> { return true } R.id.clothItem -> { return true } else -> return false } } }) 

你可以通过使用when作为表达式来稍微改进上面的内容,并返回它:

 popup.setOnMenuItemClickListener(object: PopupMenu.OnMenuItemClickListener { override fun onMenuItemClick(item: MenuItem): Boolean { return when (item.itemId) { R.id.techItem -> { true } R.id.clothItem -> { true } else -> false } } }) 

或者,您可以使用SAM转换来定义您必须在lambda中实现的单个函数:

 popup.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.techItem -> { true } R.id.clothItem -> { true } else -> false } } 
  • Kotlin反射无法访问使用网站的目标注释
  • 是否有可能使用Kotlin构建完整的Node.js Web应用程序?
  • 我们必须用Kotlin中的所有Control-Flow表达式覆盖所有分支?
  • 如何设置我的运动侦听器的存在视图
  • 当我使用Android Studio 3.0时如何存储json数据?
  • 可以使用Kotlin中的比较运算符重载来实现类似于SQL的功能吗?
  • Kotlin的类声明
  • 如何在android中从viewmodel调用baseactivity函数
  • Android Studio 3.0 Kotlin无法正常工作
  • 如何在kotlin中“静态”访问类的成员?
  • 一个模拟的类怎么能不等于它在Kotlin的java类呢?
  • Kotlin language will be the best programming language for Android.