使用SearchView后重置操作栏

时间:2012-05-02 18:58:32

标签: android android-actionbar searchview

我正在使用SearchView窗口小部件在我的应用中启用搜索功能。初始点击搜索图标后,SearchView窗口小部件会展开到搜索字段,应用程序图标旁会显示“后退”箭头。如果我单击应用程序图标,操作栏将恢复为初始状态(无“后退”箭头),SearchView将恢复为图标。

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

  1. 搜索图标显示在与编辑字段相同的位置(最初位于最右侧)。
  2. 操作栏仍显示“后退”箭头。
  3. 我认为我面临的问题是偏离常规导航模式。在我的情况下,一切都发生在同一个活动中(搜索结果显示在托管操作栏的同一个活动中),因此例如执行Activity.finish()只会让app退出。

    如何触发操作栏的“返回一步”?或者模拟点击应用程序图标?

2 个答案:

答案 0 :(得分:36)

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

答案 1 :(得分:1)

方法 collapseActionView()仅适用于API级别14.如果您希望支持早期版本的Android,则应使用 MenuItemCompat 库。< / p>

这是我解开搜索视图并重置操作栏的解决方案......

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