How to handle clicking back arrow in
androidx.appcompat.widget.SearchView
?
I founded this answer: How to handle back arrow event in a SearchView but it isn't working for me. I set the menu from a fragment.
In MainActivity I have this functions:
override fun onOptionsItemSelected(item: MenuItem): Boolean
{
Log.d("MyTag", "Activity")
return super.onOptionsItemSelected(item)
}
override fun onSupportNavigateUp(): Boolean
{
Log.d("MyTag", "Up")
return navController.navigateUp()
}
In Fragment:
searchView.setOnQueryTextListener(
object : SearchView.OnQueryTextListener
{
override fun onQueryTextSubmit(p0: String?): Boolean
{
Log.d("MyTag", "onQueryTextSubmit")
hideKeyboard()
return true
}
override fun onQueryTextChange(p0: String?): Boolean
{
return true
}
}
)
override fun onOptionsItemSelected(item: MenuItem): Boolean
{
Log.d("MyTag", "Fragment")
return super.onOptionsItemSelected(item)
}
None of these functions are called when I click the back arrow. Logcat looks like this:
// clicking search button
Activity
Fragment
// clicking Enter on keyboard
onQueryTextSubmit
// clicking back arrow (Nothing)
// When I go to the next fragment and navigate back
Activity
Up
Why there isn't called any event when I click the back arrow in SearchView? How I can achieve this?
Thanks to Rustam Samandarov here is a full code of onCreateOptionsMenu
:
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater)
{
super.onCreateOptionsMenu(menu, inflater)
inflater.inflate(R.menu.menu_toolbar_home, menu)
val menuItem = menu.findItem(R.id.itemSearch)
val searchView = menuItem.actionView as SearchView
searchView.setOnQueryTextListener(
object : SearchView.OnQueryTextListener
{
override fun onQueryTextSubmit(p0: String?): Boolean
{
Log.d("MyTag", "onQueryTextSubmit") // called when enter is pressed
hideKeyboard()
return true
}
override fun onQueryTextChange(p0: String?): Boolean
{
return true // called every time when text is changed
}
}
)
menuItem.setOnActionExpandListener(
object : MenuItem.OnActionExpandListener
{
override fun onMenuItemActionExpand(p0: MenuItem?): Boolean
{
Log.d("MyTag", "onMenuItemActionExpand") // called when user opens SearchView
return true;
}
override fun onMenuItemActionCollapse(p0: MenuItem?): Boolean
{
Log.d("MyTag", "onMenuItemActionCollapse") // called when user click back arrow or navigation back button
return true
}
}
)
}
Hi you should set expend listener to the search view
searchMenu.setOnActionExpandListener(
object : MenuItem.OnActionExpandListener {
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
// Called when SearchView is collapsing
// Custom code to run on back pressed
return true
}
override fun onMenuItemActionExpand(item: MenuItem): Boolean {
// Called when SearchView is expanding
// Custom code to run on search view activated
return true
}
})