使用SearchView后重置操作栏

11
我正在使用 SearchView 小部件实现应用内搜索功能。在首次点击搜索图标后,SearchView 小部件会展开到搜索栏,并在应用图标旁显示“返回”箭头。如果我点击应用图标,则操作栏会恢复到初始状态(没有“返回”箭头),并且 SearchView 会恢复为图标。
现在的问题是:在执行搜索后,操作栏不会更改,只能通过单击应用程序图标或手机上的“返回”箭头来恢复。这不好,因为我希望在搜索完成时操作栏回到初始状态。我尝试过使用 SearchView.setIconofied(true),但有两个问题:
  1. 搜索图标出现在编辑字段的同一位置(原本在最右侧)。
  2. 操作栏仍然显示“返回”箭头。
我认为我面临的问题是偏离了常规导航模式所导致的。在我的情况下,所有事情都发生在同一个活动中(搜索结果显示在托管操作栏的同一活动中),因此,例如执行 Activity.finish() 只会使应用退出。
如何触发操作栏的“返回一步”?或者模拟单击应用程序图标?
2个回答

37

听起来你已经将这个设置为一个可折叠的操作视图在一个菜单项上。你可以调用collapseActionView() 方法来关闭这个菜单项.


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接