Ich habe seit Wochen damit zu kämpfen. Ich habe eine globale Suche, die eine benutzerdefinierte Listenansicht mit Vorschlägen für einen Benutzer bietet. Wenn ein Benutzer eine Option auswählt, möchte ich, dass die Suchansicht zu ihrem vollständig reduzierten Status zurückkehrt.
Stattdessen schrumpft es nach unten, bleibt jedoch in einer etwas erweiterten Ansicht.
Ich habe ALLES geworfen, was ich an diesem Ding finden kann, um es zu schließen, aber ich kann für mein Leben nicht die richtige Methode bekommen. Hier ist die Funktion:
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;
}
Die Suche wird dann manuell aufgerufen, wenn ein Element aus der benutzerdefinierten Listenansicht "Vorschlag" ausgewählt wird.
Fand es. Der Aufruf sollte _searchView.onActionViewCollapsed()
sein. Warum um alles in der Welt Sie eine "Zuhörer" -Methode (dh eine, die mit "Ein" beginnt) bezeichnen, liegt mir nicht.
Anstatt _searchView.onActionViewCollapsed()
aufzurufen, rufen Sie menuItem.collapseActionView()
auf, wobei _searchView = menuItem.getActionView()
.
@sebastian das ist eigentlich nicht richtig.
Ich habe mich schon eine Weile mit diesem Thema beschäftigt, aber schließlich habe ich es geschafft, es richtig zu handhaben. Sie sollenmenuSearch.collapseActionView () aufrufen. stattdessen. Diese Methode ruft onActionViewCollapsed auf, die Sie überschreiben können. Sie rufen also keinen Hörer an;)
MenuItem menuSearch = menu.findItem(R.id.itemSearch);
SearchView searchView = (SearchView) menuSearch.getActionView();
//Don't use next line
//searchView.onActionViewCollapsed();
menuSearch.collapseActionView();
Wenn Sie Toolbar (Android.support.v7.widget.Toolbar) und die entsprechende SearchView (Android.support.v7.widget.SearchView) verwenden, funktioniert dies:
searchView.setQuery("", false);
searchView.clearFocus();
searchView.setIconified(true);
Sie sollten die Suche löschen, den Fokus entfernen und dann aufrufen:
searchView.setIconified(true);
Dies funktionierte für mich und schloss die Tastatur standardmäßig
MenuItemCompat.collapseActionView(menuItem);
Die Rückgabe von false
sollte basierend auf der neuesten Dokumentation und dem QuellcodeifficonifiedByDefault == true
ausreichend sein.
Haben Sie zufällig iconifiedByDefault="false"
definiert oder setIconifiedByDefault(false)
genannt?
searchView.setIconified(true); // Call this twice
searchView.setIconified(true);
Für mich geht das.
Ich habe die Schaltfläche "Gehe zu" in "Weiter" geändert, sodass die einzige Methode, die für mich (in API 19) funktioniert hat, die Eingabe von closeBtn.performClick();
closeBtn.performClick();
(zweimal auf die Schaltfläche "Schließen" klicken) ist das OnEditorActionListener
des AutoCompleteTextView
. Sie können das AutoCompleteTextView
wie folgt erhalten:
LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
Das hat für mich funktioniert searchMenuItem.collapseActionView();