SearchView.OnCloseListener не вызывается

Я использую панель действий и добавляю к ней поиск. Я реализовал searchView.onCLoseListener, но это не похоже на вызов. Какие-либо предложения ?

Мой код выглядит примерно так:

SearchView searchView = new SearchView(getContext()); searchView.setOnCloseListener(new OnCloseListener() { public boolean onClose() { searchView.setVisibility(SearchView.GONE); // Do Something return true; } }); 

Я столкнулся с той же проблемой на Android 4.1.1. Похоже, что это известная ошибка: https://code.google.com/p/android/issues/detail?id=25758

Во всяком случае, в качестве обходного пути я использовал прослушиватель изменений состояния (когда SearchView отсоединен от панели действий, он также закрыт).

 view.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { @Override public void onViewDetachedFromWindow(View arg0) { // search was detached/closed } @Override public void onViewAttachedToWindow(View arg0) { // search was opened } }); 

Над кодом хорошо работал в моем случае.

Чтобы вызвать метод onClose () из SearchView.OnCloseListener. Я сделал это, работая следующим образом. Добавьте это в свой поиск

 searchView.setIconifiedByDefault(true); searchView.setOnCloseListener(this); 

Теперь реализуем этот прослушиватель onclick

  searchView.findViewById(R.id.search_close_btn) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("called","this is called."); searchView.setQuery("",false); searchView.setIconified(true); } }); 

Это сработало для меня. Разделите, чтобы он помог кому-то другому. благодаря

ОК. Я получил ошибку. Мы не можем добавить searchCommand и сделать

 setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW) 

Выполнение этого приведет к удалению searchText, если таковой имеется, и, следовательно, мы не можем сделать onClose ().

Что я сделал, чтобы разобраться с подобной проблемой, я создал новый класс, который расширил SearchView:

 public class EnglishVerbSearchView extends SearchView { OnSearchViewCollapsedEventListener mSearchViewCollapsedEventListener; public EnglishVerbSearchView(Context context) { super(context); } @Override public void onActionViewCollapsed() { if (mSearchViewCollapsedEventListener != null) mSearchViewCollapsedEventListener.onSearchViewCollapsed(); super.onActionViewCollapsed(); } public interface OnSearchViewCollapsedEventListener{ public void onSearchViewCollapsed(); } public void setOnSearchViewCollapsedEventListener(OnSearchViewCollapsedEventListener eventListener) { mSearchViewCollapsedEventListener = eventListener; } } 

Затем вы можете использовать этот класс вместо SearchView в вашем XML-файле меню:

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/action_search" yourapp:showAsAction="ifRoom|collapseActionView" yourapp:actionViewClass="com.szymontrapp.englishverbs.EnglishVerbSearchView" /> </menu> 

И затем вы можете добавить слушателя в свою деятельность:

  getMenuInflater().inflate(R.menu.dictionary, menu); MenuItem searchItem = menu.findItem(R.id.action_search); EnglishVerbSearchView searchView = (EnglishVerbSearchView) MenuItemCompat.getActionView(searchItem); // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); // Assumes current activity is the searchable activity searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); // Do not iconify the widget; expand it by default searchView.setOnSearchViewCollapsedEventListener(listener); 

Вы также можете переопределить другие методы в своем классе, которые заменяют SearchView для достижения других целей.

Чтобы получить уведомление при щелчке по значку «x», я добавил кнопку «click click» на кнопку SearchView «x».

Найдите кнопку SearchView 'x' по идентификатору и присоедините OnClickListener:

 mSearchView.findViewById(R.id.search_close_btn) .setOnClickListener(this); 

Представление search_close_btn присутствует в макете SearchView, представленном каркасом Android.

  MenuItemCompat.OnActionExpandListener expandListener = new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { // Do something when action item collapses /*Hiding the mic on search visibility*/ myMenu.findItem(R.id.action_speak).setVisible(false); Log.v("test","colllapse"); return true; // Return true to collapse action view } @Override public boolean onMenuItemActionExpand(MenuItem item) { // Do something when expanded Log.v("test","expand"); return true; // Return true to expand action view } }; //Searchview Initilisation MenuItem searchViewItem = menu.findItem(R.id.action_search); // Assign the listener to that action item MenuItemCompat.setOnActionExpandListener(searchViewItem, expandListener); 

Дополнительная информация отсюда: https://developer.android.com/training/appbar/action-views.html

Если вы установили

 searchView.setIconifiedByDefault(false) 

То ваш searchView никогда не закрывается, поскольку он всегда находится в расширенном режиме. Вот почему ваш onClose () не вызывается.

Intereting Posts