当来自堆栈的片段可见时,将调用onCreateOptionsMenu,但旧菜单对象仍然存在

时间:2019-01-30 13:04:43

标签: android android-fragments android-menu

当我第一次用SearchView填充菜单时,我保留了MenuItemSearchView引用,以编程方式调用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
}

0 个答案:

没有答案