SearchView, мигание клавиатуры
В моём приложении есть 2 фрагмента.
Первый фрагмент - это обычный список с serchView в тулбаре. SerchView добавлен через меню:
<?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:id="@+id/menu_search"
android:title="Search"
android:icon="@drawable/ic_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
Код в первом фрагменте:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
setupToolbarMenu()
}
private fun setupToolbarMenu() {
viewDataBinding.toolbar.inflateMenu(R.menu.menu)
val searchItem = viewDataBinding.toolbar.menu.findItem(R.id.menu_search)
searchView = searchItem.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
query?.let { viewModel.search(it) }
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
return true
}
})
searchItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
return true
}
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
viewModel.search(null)
return true
}
})
}
Второй фрагмент отображает подробную информацию по выбранному итему из списка.
Вводим что-либо в поле поиска, переходим ко второму фрагменту, а потом возвращаемся назад. Так вот при возврате назад searchView забирает на себя фокус и заново открывается клавиатура. Если же скрывать клавиатуру, например, в методе onResume(), то при возврате происходит мигание: клавиатура открывается и мгновенно скрывается.
Как добиться такого эффекта, чтобы при возврате клавиатура не отображалась, но при этом и serchView оставался открытым с введённым запросом?
Ответы (1 шт):
Костыльно как-то решил такую проблему давно добавив в onCreateView() фрагмента:
searchView.clearFocus();