android - 需要 bool 类型的值 : Popup Menu

标签 android kotlin

我正在尝试制作一个弹出菜单,并根据单击的项目来发生一些事情。菜单项的单击监听器需要 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/

相关文章:

java - 在大 Canvas 上滚动

javafx - Autosize ScatterChart系列

android - 代码的位置,以便 'SharedPreferences' 与 'onOptionsItemSelected' 一起使用

kotlin - 折叠返回中间结果而不仅仅是最后一个结果

kotlin - 声明站点差异可能导致 ClassCastException

java - 无法将Android项目提交或推送到github,“提交”按钮被盗:(

android - 如何在全景/全景模式下直接打开相机?

Android没有手机信号有异常吗?

java - Android eclipse - android.jar 在 libs 文件夹和引用的库中重复

android - 导入 Dart 包