预期的类型布尔值:弹出式菜单的值
我正在尝试做一个弹出菜单,并根据哪个项目被点击发生的事情。 菜单项的点击监听器需要一个返回类型为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 } }** }) } })
你现在正在对象表达式和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 } }
- TornadoFX如何用子窗口模型列表创建MDI?
- 解释为什么显示警告未经检查铸造source.readArrayList(data !!。javaClass.classLoader)为ArrayList <Data>?
- 在lite模式下的MapView在onSaveInstanceState调用时崩溃
- transformClassesWithDesugar更新到AS 3.0 Canary后生成错误6
- Firebase和检索元素
- Android – 显示集群项目单击信息窗口(标题)
- RxJava 1.x .zip()不适用于RxJava 2.0
- 折叠时CollapsingToolbarLayout显示中断的标题
- 类型不匹配:推断类型是FragmentActivity? 但是在将支持库更新到27.0.0时预期上下文
- Android Kotlin onItemSelectedListener为微调不工作
- 用Android Studio 3.0 Canary 4构建错误