2012-05-02 76 views
11

我正在使用SearchView小部件來在我的應用程序中啓用搜索。在最初單擊搜索圖標後,SearchView小部件將擴展到搜索字段中,並且應用程序圖標旁邊會顯示「後退」箭頭。如果我單擊應用程序圖標,則操作欄將恢復到初始狀態(無「返回」箭頭),並且SearchView將恢復爲圖標。使用SearchView後重置操作欄

現在的問題是:執行搜索後,操作欄不會更改,唯一的還原方法是單擊應用程序圖標或手機的「後退」箭頭。因爲我希望操作欄在搜索完成後進入初始狀態,所以效果不好。我試圖SearchView.setIconofied(true)但是有2個問題:

  1. 搜索圖標出現在同一地點的編輯字段(最初它是在最右邊)。
  2. 操作欄仍然顯示「後退」箭頭。

我認爲我面臨的問題是偏離常規導航模式的結果。在我的情況下,一切都發生在同一個活動內部(搜索結果顯示在託管操作欄的同一活動中),因此例如執行Activity.finish()只會使應用程序退出。

如何觸發操作欄的「返回一步」?或者模擬點擊應用程序圖標?

回答

35

聽起來好像你已經將它設置爲MenuItem上的可摺疊動作視圖。您可以在該MenuItem實例上調用collapseActionView()將其發送回其關閉狀態。

+0

我希望我能給予好評不止一次這樣了。 – dm78

1

方法collapseActionView()如果你正在尋找早期版本的Android的支持,那麼你應該使用MenuItemCompat庫只從API級別14工作。

這裏是我的解決方案,以摺疊搜索查看和復位操作欄...

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