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

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 } } 
  • Kotlin: cómo implementar un ItemClickListener para RecyclerVIew
  • Cómo hacer que la key principal sea autoincrement para Room Persistence lib
  • ¿Se puede asignar / networkingucir una cadena en un int?
  • El operador de Kotlin Reflection obtiene la implementación
  • Las properties de beans no nulas durante la initialization se vuelven nulas durante la invocación del método @Transactional
  • ¿Cómo configurar Jacoco con Spek en un proyecto múltiple?
  • ¿Cómo establecer el atributo de peso de forma dinámica desde el código de Kotlin?
  • Cómo abrir enlaces no relacionados con la URL de la vista web en el browser de la aplicación
  • Acceder al valor del parámetro pnetworkingeterminado de una function en Kotlin
  • Cómo importar packages Java en Kotlin Native
  • ¿Por qué no se puede acceder al object dentro de un object compañero de Kotlin "estáticamente" cuando otros miembros pueden?