MenuProvider API— Android

In this article, we will learn how to use the MenuProvider API to add the Options menu to the toolbar.
Major components
- MenuHost
- MenuProvider
- LifecycleOwner
- LifecycleOwner.State
setHasOptionsMenu()
, onCreateOptionsMenu(), onOptionsItemSelected() — Deprecated 🛑

MenuProvider
It's an interface
that contains four methods
- onCreateMenu: Here we inflate the menu for the Options
- onMenuItemSelected: Here we handle what happens when the user clicks on one of the items in the Options menu
- onPrepareMenu: For customizing menu items, you need to put the
code
here.
You can, for example, change thevisibility
of aview
orcustomize
the layout ofmenu items
. - onMenuClosed: Its called when the menu is closed
MenuHost
- Interface
implemented
byComponentActivity, AppCompactActivity
which provides us with variousmethods
to control the Menu added using theMenuProvider
It has the following three
methods
:
- addMenuProvider(): It has three different variants
Adding menu from Activity
addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.main_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.settings -> {
Toast.makeText(this@MainActivity, "Settings...", Toast.LENGTH_SHORT).show()
true
}
else -> false
}
}
})
Adding menu from Fragment
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// Add options menu to the toolbar
requireActivity().addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.main_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.settings -> {
true
}
else -> false
}
}
}, viewLifecycleOwner)
}