Se esperaba un valor de tipo Booleano: menu emergente

Estoy tratando de crear un menu emergente y que las cosas sucedan según el elemento en el que se haga clic. El escucha en clic para los elementos de menu espera un tipo de devolución de tipo Booleano. Le he dado un tipo de devolución pero todavía aparece en rojo con un post de "Se esperaba un valor de tipo Booleano". ¿Podría alguien decirme qué tengo mal aquí? (Soy consciente de que no he hecho que los clics del menu hagan nada)

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 } }** }) } }) 

Solutions Collecting From Web of "Se esperaba un valor de tipo Booleano: menu emergente"

Lo que tienes ahora es en algún lugar entre las expresiones de object y un constructor de SAM. Aquí hay algunas opciones para arreglarlo.

Puede usar la syntax de expresión de object completa, que se ve así:

 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 } } }) 

Puede mejorar lo anterior ligeramente usando when como expresión y devolverlo:

 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 } } }) 

O simplemente puede usar la conversión SAM para definir la function única que tendría que implementar en una lambda:

 popup.setOnMenuItemClickListener { item -> when (item.itemId) { R.id.techItem -> { true } R.id.clothItem -> { true } else -> false } }