Сбросить панель действий после использования SearchView

Я использую виджет SearchView чтобы включить поиск в моем приложении. После первоначального нажатия на значок SearchView виджет SearchView расширяется в поле поиска, а рядом с значком приложения отображается стрелка «назад». Если щелкнуть значок приложения, панель действий вернется в исходное состояние (нет «назад»), а SearchView вернется к значку.

Теперь проблема: после того, как поиск выполнен, панель действий не изменяется, единственный способ вернуться – щелкнуть значок приложения или «назад» стрелки телефона. Не хорошо, так как я хочу, чтобы панель действий переходила в исходное состояние, когда поиск выполнен. Я попробовал SearchView.setIconofied(true) но есть две проблемы:

  1. Значок поиска появляется в том же месте, что и поле редактирования (первоначально оно находится справа).
  2. На панели действий по-прежнему отображается стрелка «назад».

Я думаю, что проблема, с которой я столкнулась, является результатом отклонения от обычной схемы навигации. В моем случае все происходит внутри одного и того же действия (результаты поиска отображаются в том же самом действии, что и на панели действий), поэтому, например, выполнение Activity.finish() просто делает выход приложения.

Как вызвать «вернуться на один шаг» панели действий? Или имитировать щелчок на значке приложения?

Solutions Collecting From Web of "Сбросить панель действий после использования SearchView"

Похоже, вы настроили это как сворачиваемое действие на MenuItem. Вы можете вызвать collapseActionView () в этом экземпляре MenuItem, чтобы отправить его обратно в закрытое состояние.

Метод collapseActionView () работает только с уровня API 14. Если вы хотите поддерживать более ранние версии Android, вам следует использовать библиотеку MenuItemCompat .

Вот мое решение, чтобы свернуть поиск и сбросить панель действий …

 private MenuItem searchMenuItem; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchMenuItem = menu.findItem(R.id.action_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchMenuItem); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); customizeSearchView(searchView); return super.onCreateOptionsMenu(menu); } @Override protected void onNewIntent(Intent intent) { setIntent(intent); if (searchMenuItem != null) { if (MenuItemCompat.expandActionView(searchMenuItem)) { MenuItemCompat.collapseActionView(searchMenuItem); } else if (MenuItemCompat.collapseActionView(searchMenuItem)) { MenuItemCompat.expandActionView(searchMenuItem); } } handleIntent(intent); }