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.
我现在的情况是这样的:
我的 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.