Intereting Posts
Как обрабатывать ошибки в пользовательском AsyncTaskLoader? Как реализовать мой собственный кеш диска с библиотекой picasso – Android? Как вы можете справиться с увольнением DialogFragment (совместимость lib) после завершения AsyncTask Android заменит текущий фрагмент другим фрагментом Как остановить Open GL renderer Получить реферер после установки приложения из Android Маркета Как просмотреть общедоступный Календарь Google через приложение для Android Asus Nexus 7 не распознается инструментами Android dev через adb Должен ли я использовать android LocationManager.getBestProvider каждый раз, когда я запрашиваю обновления местоположения? Android Studio Update 0.4.0 не удалось найти buildConfig () Изменить картинку Floating Action Button Android Android .setColor для большой иконки ConnectivityManager.CONNECTIVITY_ACTION отключить сеть в API> = 14? AlertDialog невидим, когда активность возвращается на передний план Android: Почему getDimension и getDimensionPixelSize возвращают то же самое?

Android ActionBarSherlock, SearchView `setOnCloseListener` не работает

Я использую SearchView, и он работает нормально, но только setOnCloseListener не работает; Вот мой код

 import com.actionbarsherlock.widget.SearchView.OnCloseListener; 

а также

 searchView.setOnCloseListener(new OnCloseListener() { @Override public boolean onClose() { Toast.makeText(context, "close", Toast.LENGTH_SHORT).show(); return false; } }); 

** РЕДАКТИРОВАТЬ * * **

 @Override public boolean onCreateOptionsMenu(Menu menu) { //Used to put dark icons on light action bar //Create the search view final SearchView searchView = new SearchView(getSupportActionBar().getThemedContext()); searchView.setQueryHint("Search"); searchView.setIconifiedByDefault(true); //search button menu.add(Menu.NONE,Menu.NONE,1,"Search a word") .setIcon(R.drawable.abs__ic_search_api_holo_light) .setActionView(searchView) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); MenuItem sView = menu.findItem(1); sView.setOnActionExpandListener(this); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { adopter.getFilter().filter(null); Toast.makeText(getApplicationContext(), "collapse", Toast.LENGTH_LONG).show(); return true; // Return true to collapse action view } @Override public boolean onMenuItemActionExpand(MenuItem item) { Toast.makeText(getApplicationContext(), "Expand", Toast.LENGTH_LONG).show(); return true; // Return true to expand action view } 

Solutions Collecting From Web of "Android ActionBarSherlock, SearchView `setOnCloseListener` не работает"

Решил сам. Просто оставьте setOnCloseListener он не будет работать, и onCreateOptionsMenu следующий код в onCreateOptionsMenu

 // searchView.setOnCloseListener(new OnCloseListener() { // @Override // public boolean onClose() { // adapter.getFilter().filter(""); // Toast.makeText(getBaseContext(), "on close", Toast.LENGTH_SHORT).show(); // return false; // } // }); MenuItem menuItem = menu.findItem(ID_OF_SEARCHVIEW); menuItem.setOnActionExpandListener(new OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { adapter.getFilter().filter(""); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { adapter.getFilter().filter(""); return true; } }); 

Вы можете использовать OnActionExpandListener:

 public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { SearchView searchView = new SearchView(((SherlockFragmentActivity) getActivity()).getSupportActionBar().getThemedContext()); searchView.setIconifiedByDefault(true); // ... MenuItem menuItem = menu.add(R.string.search); // ... menuItem.setOnActionExpandListener(this); } @Override public boolean onMenuItemActionExpand(final MenuItem item) { mInSearchMode = true; return true; } @Override public boolean onMenuItemActionCollapse(final MenuItem item) { mInSearchMode = false; return true; } 

Я использую этот код. И он отлично работает

  @Override public void onStartSearch() { } @Override public void onSearch(String search) { } @Override public void onCloseSearch() { } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.your_menu, menu); // Associate searchable configuration with the SearchView MenuItem searchItem = menu.findItem(R.id.action_search); mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); //here I user appcompat, but you can take it just from actionbarsherlock SearchView.SearchAutoComplete searchAutoComplete = (SearchView.SearchAutoComplete) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchAutoComplete.setTextColor(getResources().getColor(R.color.action_bar_text_color)); mSearchView.setIconifiedByDefault(true); mSearchView.setSubmitButtonEnabled(false); /** * Set all of different kinds of listeners */ MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { menuIsOpen = false; onCloseSearch(); return true; } @Override public boolean onMenuItemActionExpand(MenuItem item) { menuIsOpen = true; onStartSearch(); return true; } }); mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String s) { onSearch(s); return false; } @Override public boolean onQueryTextSubmit(String s) { onSearch(s); return true; } }); super.onCreateOptionsMenu(menu, inflater); } /** * Function for closing search when android is less than 14 */ public boolean onBackButton() { if (AndroidUtils.getSdkVersion() >= 14) return false; if (menuIsOpen) { menuIsOpen = false; getActivity().supportInvalidateOptionsMenu(); onCloseSearch(); return true; } return false; } 

После того, как backButton закроет поиск, или просто откройте панель действий.

Я столкнулся с той же проблемой, когда onCloseListener не вызывается для SearchView. Поймите из проблемы с ошибкой, поднятой в 25758 , и некоторых сообщений, которые я прочитал, чтобы вызвать onCloseListener, вам нужно установить:

 searchView.setIconifiedByDefault(true); 

Но для моего случая я хотел, чтобы поиск был открыт и не отображался все время. Мне удалось решить эту проблему, добавив еще одну строку ниже:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.search_bar, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setOnQueryTextListener(queryTextListener); searchView.setIconifiedByDefault(true); searchView.setIconified(false); return true; } 

SearchView.setIconified (false) приведет к тому, что searchView откроется, несмотря на то, что в предыдущей строке значение по умолчанию указано в true. Таким образом, мне удалось найти и SearchView, который открывается все время и вызывает его onCloseListener.