Kotlin开发Android时setOnMenuItemClickListener报意外类型规范错误如何解决
修复方案
错误原因
你在实现OnMenuItemClickListener时用了非法的Kotlin语法:多余的PopupMenu:类型标注、匿名接口实现的格式不符合Kotlin规范,才会报类型相关的语法错误。
修复代码
推荐用Kotlin单抽象方法(SAM)转换的简洁写法,直接替换你标注的问题行到对应的闭包结束的所有代码即可:
popupMenu.setOnMenuItemClickListener { menuItem -> Toast.makeText( this@MainActivity, "You Clicked ${menuItem.title}", Toast.LENGTH_SHORT ).show() // 此处返回true表示消费了点击事件 true }
如果需要和Java匿名类写法对应的完整对象表达式写法,也可以用下面的代码:
popupMenu.setOnMenuItemClickListener(object : PopupMenu.OnMenuItemClickListener { override fun onMenuItemClick(menuItem: MenuItem): Boolean { Toast.makeText( this@MainActivity, "You Clicked ${menuItem.title}", Toast.LENGTH_SHORT ).show() return true } })
可选优化点
你可以顺便修改其他不符合Kotlin习惯的代码,减少冗余:
- 按钮初始化可以简化为
val popbutton: Button = findViewById(R.id.clickBtn),不需要额外的类型强转 - 按钮点击监听可以简化为
popbutton.setOnClickListener { ... },不需要显式声明View.OnClickListener - 字符串拼接用Kotlin字符串模板
${}代替+,可读性更高
内容的提问来源于stack exchange,提问作者Megan Darcy
相关产品推荐
相关产品推荐

