2012-05-02 25 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); 
}