У меня есть активность с ViewPager, которая содержит 4 фрагмента.В одном из фрагментов, отображающих контакты, я добавил OptionsMenu с действием SearchView.
Изначально все работает отлично, OptionsMenu отображается, когда загружается этот конкретный фрагмент, но как только появляется дочерний DialogFragment, OptionsMenu не может обновиться.Если какой-то DialogFragment открыт во фрагменте контактов (тот, что с OptionsMenu), то MenuItem остается видимым везде в приложении.Если какой-то DialogFragment открывается из других частей приложения, то MenuItem остается скрытым, даже если пользователь возвращается к фрагменту контактов.Чего мне не хватает?
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setHasOptionsMenu(true)
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.contacts_menu, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onPrepareOptionsMenu(menu: Menu?) {
super.onPrepareOptionsMenu(menu)
menu?.let {
val searchItem = menu.findItem(R.id.search)
setupSearchView(searchItem)
}
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
return when (item?.itemId) {
R.id.search -> {
item.expandActionView()
true
}
else -> super.onOptionsItemSelected(item)
}
}
private fun setupSearchView(searchItem: MenuItem) {
val searchView = searchItem.actionView as SearchView
val clearButton = searchView.findViewById<ImageView>(R.id.search_close_btn)
val searchViewLayoutParams = searchView.findViewById<LinearLayout>(R.id.search_edit_frame).layoutParams as LinearLayout.LayoutParams
searchViewLayoutParams.leftMargin = 0
searchView.setOnQueryTextListener(object: SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
query?.let {
if(query.isBlank()) {
showProperContacts(RESTORE_CONTACTS)
} else {
showProperContacts(query = it)
}
}
return false
}
override fun onQueryTextChange(query: String?): Boolean {
query?.let {
showProperContacts(query = it)
}
return false
}
})
searchItem.setOnActionExpandListener(object: MenuItem.OnActionExpandListener {
override fun onMenuItemActionExpand(item: MenuItem?): Boolean = true
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
showProperContacts(RESTORE_CONTACTS)
animateFilter(true)
return true
}
})
clearButton.setOnClickListener {
searchView.setQuery("", true)
}
}