Ответ 1
Нашел. Вызов должен быть _searchView.onActionViewCollapsed()
. Почему вы называете метод стиля "слушателя" (т.е. тот, который начинается с 'on'), вне меня.
Я боролся с этим в течение нескольких недель. У меня есть глобальный поиск, который предлагает настраиваемый список с предложениями в качестве типов пользователей. Когда пользователь выбирает параметр, я хочу, чтобы searchview возвращался в полностью спящее состояние.
Вместо этого он сжимается, но остается в слегка расширенном виде.
Я бросил ВСЕ, Я могу найти в этой вещи, чтобы закрыть его, но не могу, чтобы жизнь меня получила правильный метод. Здесь функция:
final SearchView.OnCloseListener closeListener = new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
return closeSearch();
}
};
protected boolean closeSearch() {
_searchView.clearFocus();
_searchView.setQuery("", false);
_searchView.setFocusable(false);
_searchMenuItem.collapseActionView();
isSearchFragmentVisible(false);
return false;
}
Затем поиск по вызову вручную вызывается, когда элемент выбирается из пользовательского списка "предложение".
Нашел. Вызов должен быть _searchView.onActionViewCollapsed()
. Почему вы называете метод стиля "слушателя" (т.е. тот, который начинается с 'on'), вне меня.
Вместо вызова _searchView.onActionViewCollapsed()
вызов menuItem.collapseActionView()
, где _searchView = menuItem.getActionView()
.
@sebastian, что на самом деле не так.
Некоторое время я занимался этой проблемой, но, наконец, мне удалось справиться с этим правильно. Предположим, что вместо этого вызывается menuSearch.collapseActionView();. Этот метод вызовет методActionViewCollapsed, который вы можете переопределить. Поэтому вы не вызываете слушателя;)
MenuItem menuSearch = menu.findItem(R.id.itemSearch);
SearchView searchView = (SearchView) menuSearch.getActionView();
//Don't use next line
//searchView.onActionViewCollapsed();
menuSearch.collapseActionView();
Если вы используете Панель инструментов (android.support.v7.widget.Toolbar) и соответствующий SearchView (android.support.v7.widget.SearchView) с это, это работает:
searchView.setQuery("", false);
searchView.clearFocus();
searchView.setIconified(true);
Это сработало для меня, и оно также закрыло клавиатуру по умолчанию
MenuItemCompat.collapseActionView(menuItem);
Вы должны очистить поиск, удалить фокус, а затем вызвать:
searchView.setIconified(true);
Возврат false
должен быть достаточным на основе последней документации и исходный код iff iconifiedByDefault == true
.
Вы случайно определили iconifiedByDefault="false"
или вызвали setIconifiedByDefault(false)
?
Я изменил кнопку "Go" на "Next", поэтому единственный способ, который работал у меня (API 19), - это ввести closeBtn.performClick();
closeBtn.performClick();
(Дважды нажмите кнопку "закрыть" ) в OnEditorActionListener
AutoCompleteTextView
.
Вы можете получить AutoCompleteTextView
следующим образом:
LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
searchView.setIconified(true); // Call this twice
searchView.setIconified(true);
Это работает для меня.
Это сработало для меня searchMenuItem.collapseActionView();