onCreateOptionsMenu вызывается, когда фрагмент из backstack становится видимым, но старые объекты меню все еще присутствуют - PullRequest
0 голосов
/ 30 января 2019

Когда я впервые надуваю меню с помощью SearchView, я сохраняю ссылки MenuItem и SearchView для программного вызова expandactionView(), а также для установки OnQueryTextListener.Когда фрагмент с этим SearchView попадает в backstack и дает, и другой фрагмент с его собственным меню становится видимым, и некоторое время назад возвращается к фрагменту с этим 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, будь то старый или новый (не имеет значения).

PS: view - это просто мой "прокси" объект для видимых элементов на экране.Внутренне withSearchView работает так:

fun withSearchView(menuItem: MenuItem, searchView: SearchView) {
    this.menuItem = menuItem
    this.searchView = searchView
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...