Intereting Posts
Расширение класса в приложении в библиотеке проектов Android? Запутывание решений PNG banding Невозможно использовать Fragment.setRetainInstance () в качестве замены для Activity.onRetainNonConfigurationInstance () Java.net.ConnectException: не удалось подключиться к /192.168.253.3 (порт 2468): соединение не выполнено: ECONNREFUSED (соединение отклонено) Получение «java.lang.reflect.InvocationTargetException» при попытке зарегистрировать широковещательный приемник встроенного apk Как получить все имена таблиц в базе данных android sqlite? Как скрыть кнопку программно? До того, как менеджер загрузки Android получит статус загрузки, скачав ссылку Id? Android DataBinding в RecyclerView.ViewHolders с различными макетами Намерение камеры не возвращается к вызывающей активности Можем ли мы подключиться к iPhone с устройства Android, хотя и не в той же сети? Единичное тестирование приложений Android на Eclipse + jUnit – Прогон теста не выполнен: пробный запуск неполный. Ожидаемые 1 тесты, полученные 0 Как установить вкладку по умолчанию для нескольких видов прокрутки с вкладками? Android: нет запущенного устройства Уведомление, созданное IntentService, всегда использует неправильное намерение

Как обнаружить кнопку возврата в SearchView?

Я использую одно действие для отображения SearchView, а также для отображения результатов поиска. Результаты поиска – это всего лишь подмножество элементов, поэтому поиск действует как фильтр. Кажется, все работает отлично, за исключением того, что я не могу понять, как восстановить все элементы в представлении, когда нажата кнопка «Назад» в SearchView.

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

благодаря

Поэтому, глядя на название вашего вопроса, вы не знаете, как обнаружить, когда SearchView закрывается, и, следовательно, вы не можете восстановить свои представления в «нормальном» состоянии, когда SearchView больше не открывается.

Устаревшее решение от Android 4.0+

(Простое) решение состоит в том, чтобы добавить: 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. } }); 

EDIT :

Обновленное решение, которое работает в Android 4.0+

По-видимому, OnCloseListener неисправен и не работает на более поздних версиях Android (4.0+). См. https://code.google.com/p/android/issues/detail?id=25758.

Решением этого является использование версии библиотеки поддержки 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 даже не потрудился написать комментарий в документации, я не знаю, но это печально.

EDIT2 :

Просто добавив ссылку, которую @MateiRadu добавил в комментарии:

Как обращаться с кнопкой возврата в Search View в android

Это также показывает, как использовать OnActionExpandListener вместо OnCloseListener .

Надеюсь это поможет.

Ответ Darwind выполнит эту работу, но это работает только тогда, когда пользователь нажимает кнопку «Назад», чтобы закрыть клавиатуру, и когда SearchView больше не имеет фокуса.

Лучший способ сделать это – прослушать изменения в SearchView .
Таким образом, вы можете восстанавливать представления и управлять пользовательским интерфейсом при обновлении текста.
Вот как я это делаю.

 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; } });