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

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

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

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

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

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

Ответ 1

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

Ответ 2

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

Здесь мое решение свернуть searchview и reset панель действий...

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);
}