11

我正在使用SearchView小部件在我的应用程序中启用搜索。在最初单击搜索图标后,SearchView小部件会展开到搜索字段中,并且“返回”箭头显示在应用程序图标旁边。如果我单击应用程序图标,操作栏会恢复到初始状态(没有“后退”箭头)并且SearchView恢复到图标。

现在的问题是:执行搜索后,操作栏没有改变,唯一恢复的方法是单击应用程序图标或手机的“返回”箭头。不好,因为我希望操作栏在搜索完成后进入初始状态。我试过SearchView.setIconofied(true)了,但有两个问题:

  1. 搜索图标与编辑字段出现在同一位置(最初位于最右侧)。
  2. 操作栏仍显示“返回”箭头。

我认为我面临的问题是偏离常规导航模式造成的。在我的情况下,一切都发生在同一个活动中(搜索结果显示在承载操作栏的同一个活动中),因此例如执行Activity.finish()只会让应用退出。

如何触发操作栏的“后退一步”?还是模拟点击应用程序图标?

4

2 回答 2

37

听起来您已将其设置为 MenuItem 上的可折叠操作视图。您可以在该 MenuItem 实例上调用collapseActionView()以将其发送回其关闭状态。

于 2012-05-05T19:09:59.560 回答
1

方法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);
}
于 2014-02-28T14:25:26.550 回答