Ожидаемое значение типа Boolean: всплывающее меню

Я пытаюсь создать всплывающее меню, и все происходит в зависимости от того, на какой элемент нажата кнопка. При прослушивании кликов для пунктов меню ожидается тип возврата типа Boolean. Я дал ему тип возврата, но он все еще отображается красным цветом с сообщением «Ожидаемое значение типа Boolean». Может ли кто-нибудь сказать мне, что я здесь не так? (Я знаю, что я не делал клики меню делать что-либо)

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. Вот некоторые варианты его исправления.

Вы можете использовать синтаксис полного выражения объекта , который выглядит так:

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

Вы можете немного улучшить это, используя выражение в качестве выражения и вернув его:

 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 для определения единственной функции, которую вы должны были бы реализовать в лямбда:

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