searchView menuItem 出现在可折叠菜单中然后消失

searchView menuItem appears in the collapsible menu then disappears

我现在的情况是这样的:

我的 SearchView 出现在菜单上。

通常折叠菜单没有搜索菜单。

当我按下搜索菜单并打开折叠菜单时,折叠菜单中有搜索。为什么会这样?

另外,发生这种情况后,如果折叠菜单关闭并且用户退出搜索,搜索图标就会消失。 我该如何解决这个问题?

我的 onCreateOptionsMenu:

        val inflater: MenuInflater = menuInflater
        inflater.inflate(R.menu.menu, menu)

        val trendingBtn = menu?.findItem(R.id.trending)
        trendingBtn?.setOnMenuItemClickListener {
            viewModel.trending()
            true
        }


        val searchItem = menu?.findItem(R.id.search)
        val searchView = searchItem?.actionView as SearchView

        searchItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
            override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
                Toast.makeText(this@MainActivity, "Search is Expanded", Toast.LENGTH_SHORT).show()
                return true
            }

            override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
                Toast.makeText(this@MainActivity, "Search is Collapsed", Toast.LENGTH_SHORT).show()
                return true
            }
        })

        searchView.queryHint = "Search"
        searchView.setOnQueryTextListener(object : OnQueryTextListener {
            override fun onQueryTextChange(s: String): Boolean {
                return false
            }

            override fun onQueryTextSubmit(s: String?): Boolean {
                val searchString = "Searching " + s
                Toast.makeText(this@MainActivity, searchString, Toast.LENGTH_SHORT).show()

                loadSearchVideoList(s)

                val intent = Intent(applicationContext, MainActivity::class.java)
                intent.putExtra(SearchManager.QUERY, s)
                intent.putExtra(
                    "CUSTOM_MESSAGE",
                    "you can also add custom message when submitting the search action"
                )
                intent.action = Intent.ACTION_SEARCH
                startActivity(intent)
                return false
            }
        })

        return super.onCreateOptionsMenu(menu)
    }

我的menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:title="@string/search"
        android:icon="@drawable/ic_search"
        android:id="@+id/search"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"/>
    <item
        android:title="@string/trending"
        android:icon="@drawable/ic_baseline_trending_up_24"
        android:id="@+id/trending"/>


</menu>

看看invalidateOptionsManu()方法,我想这就是你要找的。

您应该在展开搜索后调用此方法,以便它可以“重新创建”菜单。

来自文档:

Declare that the options menu has changed, so should be recreated. The onCreateOptionsMenu(android.view.Menu) method will be called the next time it needs to be displayed.