如何检测SearchView的后退button?

我正在使用单个活动来显示SearchView以及显示search结果。 search结果只是项目的一个子集,所以search就像一个filter。 似乎一切工作正常,除了我不知道如何恢复视图中的一个后退button点击时的所有项目。

或者,也许有另一种方式来检测用户从search结果导航到以前的视图(在我的情况下,是相同的观点)。

谢谢

Solutions Collecting From Web of "如何检测SearchView的后退button?"

所以看看你的问题的标题,你不知道如何检测什么时候SearchView被closures,因此当SearchView不再被打开时,你不能将视图恢复到“正常”状态。

Android 4.0+以上的过时解决scheme

(简单)的解决scheme是添加一个: SearchView.OnCloseListener到你的SearchView ,像这样:

 SearchView.setOnCloseListener(new SearchView.OnCloseListener() { @Override public boolean onClose() { // This is where you can be notified when the `SearchView` is closed // and change your views you see fit. } }); 

编辑

适用于Android 4.0+的更新解决scheme

显然OnCloseListener是越野车,并不适用于较新版本的Android(4.0+)。 请参阅: https : //code.google.com/p/android/issues/detail?id = 25758

解决scheme是使用SearchView的支持库版本:

我的onCreateOptionsMenu看起来像这样:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); MenuItem searchMenuItem = menu.findItem(R.id.searchView); SearchView searchView = (SearchView) searchMenuItem.getActionView(); MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { Toast.makeText(ScrollingActivity.this, "onMenuItemActionExpand called", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { Toast.makeText(ScrollingActivity.this, "onMenutItemActionCollapse called", Toast.LENGTH_SHORT).show(); return true; } }); } 

至于为什么Google甚至不打算在文档中写评论我不知道,但是很伤心。

编辑2

只需添加@MateiRadu在评论中添加的链接:

在android中如何处理search视图的后退button

这也显示了如何使用OnActionExpandListener而不是OnCloseListener

希望这可以帮助。

Darwind的答案将完成这项工作,但只有当用户按下后退buttonclosures键盘,当SearchView没有焦点的时候才会起作用。

更好的方法是侦听SearchView的文本更改。
这样,您可以在文本更新时恢复视图并控制UI。
这是我怎么做的。

 SearchView searchView = new SearchView(context); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { // this is when user is done typing and clicks search return false; } @Override public boolean onQueryTextChange(String newText) { // you can use this to do a "live" search while the user is typing. // this will trigger each time user changes (adds or removes) text // so when newText is empty, restore your views return false; } });