当我第一次用SearchView
填充菜单时,我保留了MenuItem
和SearchView
引用,以编程方式调用expandactionView()
并设置了{ {1}}。
当带有此OnQueryTextListener
的片段进入后退栈并给出另一个带有其自己菜单的片段时,并且有一段时间执行返回到带有此SearchView
的片段的操作,则SearchView
被执行当然可以。
但这是一个问题:保留了一个旧 onCreateOptionsMenu
。
这是“搜索”片段的SearchView
的代码:
onCreateOptionsMenu
当我以编程方式调用override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
menu?.clear()
inflater!!.inflate(R.menu.menu_scenarios, menu)
val menuItem: MenuItem = menu!!.findItem(R.id.action_search)
val searchView: SearchView = menuItem.actionView!! as SearchView
view.withSearchView(menuItem, searchView)
addOnQueryListener(searchView)
setSignalingExpandListener()
}
时,是另一种情况,新的expandActionView()
正在扩展,而保留了某种原因的旧的MenuItemImpl
则不会在屏幕上扩展。随后,当我随后点击搜索图标时,是旧的MenuItem
收到了请求(已通过调试器进行了验证)。
如何解决这个问题?我需要一个SearchView
,无论是旧的还是新的(没关系)。
P.S .:视图只是我在屏幕上可见元素的“代理”对象。内部withSearchView
的工作方式如下:
fun withSearchView(menuItem: MenuItem, searchView: SearchView) {
this.menuItem = menuItem
this.searchView = searchView
}