2012-05-02 2 views
11

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

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

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

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

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

ответ

35

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

+0

Я хотел бы upvote это больше, чем один раз. – dm78

1

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

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

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