我正在尝试制作一个弹出菜单,并根据单击的项目来发生一些事情。菜单项的单击监听器需要 bool 类型的返回类型。我已经给它一个返回类型,但它仍然全部显示为红色,并带有“预期 bool 类型的值”消息。有人可以告诉我我这里出了什么问题吗? (我知道我没有让菜单点击执行任何操作)
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 构造函数之间。以下是修复该问题的一些选项。
您可以使用完整的object expression语法,如下所示:
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 conversion定义必须在 lambda 中实现的单个函数:
popup.setOnMenuItemClickListener { item ->
when (item.itemId) {
R.id.techItem -> {
true
}
R.id.clothItem -> {
true
}
else -> false
}
}
关于android - 需要 bool 类型的值 : Popup Menu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019992/