'How to avoid reinflating menu in fragments with AppBarLayout?

I inflate my SearchView into my AppBarLayout and MaterialToolbar in MainActivity. When I search items in ListFragment and open DetailFragment for an item then get back my AppBarLayout inflates again and I see my list is cleared. I want it to save query and show my previous state.

In ListFragment I do:

override fun onCreateOptionsMenu(menu: Menu, menuInflater: MenuInflater) {
    menuInflater.inflate(R.menu.menu_main, menu)
}

override fun onPrepareOptionsMenu(menu: Menu) {
    super.onPrepareOptionsMenu(menu)
    setupSearchView(menu)
}

private fun setupSearchView(menu: Menu) {
    userSearchView = menu.findItem(R.id.search).actionView as SearchView
    userSearchView?.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            query?.let(viewModel::trySearching)
            return true
        }

        override fun onQueryTextChange(newText: String?): Boolean {
            newText?.let(viewModel::trySearching)
            return true
        }
    })
}

In DetailFragment I do:

override fun onPrepareOptionsMenu(menu: Menu) {
    super.onPrepareOptionsMenu(menu)
    menu.clear()
}

For navigation I use AAC nav component



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source