it-swarm.com.de

Wie kann ich eine SearchView nach einem ausgewählten Element vollständig ausblenden?

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.

enter image description here

Stattdessen schrumpft es nach unten, bleibt jedoch in einer etwas erweiterten Ansicht.

enter image description here

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. 

25
Sebastian

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. 

41
Sebastian

Anstatt _searchView.onActionViewCollapsed() aufzurufen, rufen Sie menuItem.collapseActionView() auf, wobei _searchView = menuItem.getActionView().

49
siavach

@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();
17
Ender Muab'Dib

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);
11
hakobyanheghine

Sie sollten die Suche löschen, den Fokus entfernen und dann aufrufen:

searchView.setIconified(true);
6
Stephane

Dies funktionierte für mich und schloss die Tastatur standardmäßig

MenuItemCompat.collapseActionView(menuItem);
3
Bala Vishnu

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?

2
TWiStErRob
searchView.setIconified(true); // Call this twice
searchView.setIconified(true);

Für mich geht das.

1
LunaElf

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

0
inkedTechie