我正在使用SearchView
窗口小部件在我的应用中启用搜索功能。初始点击搜索图标后,SearchView
窗口小部件会展开到搜索字段,应用程序图标旁会显示“后退”箭头。如果我单击应用程序图标,操作栏将恢复为初始状态(无“后退”箭头),SearchView
将恢复为图标。
现在问题是:执行搜索后操作栏不会改变,恢复的唯一方法是单击应用程序图标或手机的“后退”箭头。不好,因为我希望操作栏在搜索完成后进入初始状态。我试过SearchView.setIconofied(true)
,但有两个问题:
我认为我面临的问题是偏离常规导航模式。在我的情况下,一切都发生在同一个活动中(搜索结果显示在托管操作栏的同一个活动中),因此例如执行Activity.finish()
只会让app退出。
如何触发操作栏的“返回一步”?或者模拟点击应用程序图标?
答案 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);
}