如何closures/closures/折叠MainActivity中的ActionBar SearchView?

input一个值后,我试图清除并closuresSearchView。 我find了一个解决scheme,但它closuressearch,如果我再次search,将不会执行任何操作。

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setOnQueryTextListener(searchListener); return super.onCreateOptionsMenu(menu); } SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); try { searchView.onActionViewCollapsed(); } catch(Exception ex){ ex.printStackTrace(); System.out.println(ex); } return true; } }; 

我只能第一次search。 每当下一次它只closures我的input键盘,什么都不做。 如何以正确的方式执行?

编辑。 build议的更改如下所示:

  try { searchView.setIconified(true); } 

activity_main_actions.xml:

  <!-- Search Widget --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/> 

EDIT2:

我改变了showAsAction="always|collapseActionView"但它closures我的应用程序,当我点击search。

我也把这个监听器放在OnCreateOptionsMenu里面,看它是否改变了任何东西:

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); searchMenuItem = menu.findItem(R.id.action_search); searchView = (SearchView) searchMenuItem.getActionView(); searchView.setOnQueryTextListener(new OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { if (searchMenuItem != null) { boolean closed = searchMenuItem.collapseActionView(); Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show(); } new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); return false; } }); return super.onCreateOptionsMenu(menu); } 

closed布尔值是false – 我不知道为什么。 我读了文件,但没有告诉我什么。

EDIT3:

我已经在这个主题上读了太多的互联网,但目前还不清楚。 search小部件被清除,键盘被隐藏并执行操作。 唯一的问题是search没有被折叠,所以它覆盖了ActionBar上其余的操作button。

  @Override public boolean onQueryTextSubmit(String query) { searchView.setIconified(true); searchView.clearFocus(); new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); return false; } 

在这里我读了collapseActionView()将不起作用,因为我的search不是一个视图,而是一个小部件。

Solutions Collecting From Web of "如何closures/closures/折叠MainActivity中的ActionBar SearchView?"

使用:

searchMenuItem.collapseActionView();

代替:

searchView.onActionViewCollapsed();

如果您使用的是AppCompat library ,那么请使用:

MenuItemCompat.collapseActionView(searchMenuItem);

在我的情况下调用invalidateOptionsMenu(); closuresSearchView

在menu_main.xml中添加:

 <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="Search" app:showAsAction="collapseActionView|ifRoom" android:orderInCategory="1" app:actionViewClass="android.support.v7.widget.SearchView" android:menuCategory="secondary" /> 

并在onCreateOptionsMenu

 final MenuItem miSearch = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) miSearch.getActionView(); searchView.setQueryHint("Searh For"); searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(context,query, Toast.LENGTH_LONG).show(); // Here Put Your Code. //searchView.onActionViewCollapsed(); miSearch.collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } }); 

这里提到的解决scheme很简单,完美的作品

基本上,在SearchView上调用setQuery("", false)setIconified(true)

这听起来像你正在寻找的是一种方式来closuressearch栏编程。 不幸的是,这没有一种方法或相当的解决方法。 你可能已经看到另一个post有一些build议,但没有真正的方法来做到这一点。

你上面第一次调用setIconified(true)编辑是最好的select。 文档build议调用setIconified(true)应该折叠search窗口小部件,将其清除,如果属性iconifiedByDefault为true(这是默认情况下,所以我没有看到任何问题与您的activity_main_actions.xml)从焦点中删除它。

嗨,我面临类似的情况,所以我认为这改变了代码应该做的伎俩。
希望这可以帮助…:)

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); Menu mMenuItem = menu.findItem(R.id.action_search_loc); // take a reference with menue item searchView = (SearchView) mMenuItem.getActionView(); //use that to find searchview searchView.setOnQueryTextListener(searchListener); return super.onCreateOptionsMenu(menu); } SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); try { mMenuItem.collapseActionView(); //this will collapse your search view } catch(Exception ex){ ex.printStackTrace(); System.out.println(ex); } return true; } };