web-dev-qa-db-fra.com

Comment réduire complètement un SearchView après un élément sélectionné?

Cela fait des semaines que je lutte avec cela. J'ai une recherche globale qui propose une liste personnalisée avec des suggestions en tant que type d'utilisateur. Lorsqu'un utilisateur sélectionne une option, je souhaite que la vue de recherche retourne à son état complètement réduit.

enter image description here

Au lieu de cela, il se réduit mais reste dans une vue légèrement développée.

enter image description here

J'ai tout ce que je peux trouver à cette chose pour la fermer, mais je ne peux pas pour la vie de moi avoir la bonne méthode. Voici la fonction:

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

La recherche rapprochée est ensuite appelée manuellement lorsqu'un élément est sélectionné dans la liste personnalisée "suggestion". 

25
Sebastian

Je l'ai trouvé L'appel doit être _searchView.onActionViewCollapsed(). Pourquoi diable appelez-vous une méthode de style "auditeur" (c'est-à-dire qui commence par "on") me dépasse. 

41
Sebastian

Au lieu d'appeler _searchView.onActionViewCollapsed(), appelez menuItem.collapseActionView()_searchView = menuItem.getActionView().

49
siavach

@sebastian ce n'est pas vraiment vrai.

Cela fait un moment que je suis coincé dans cette affaire, mais j'ai finalement réussi à la gérer de la bonne façon. Vous êtes censé appelermenuSearch.collapseActionView (); au lieu. Cette méthode appelle onActionViewCollapsed, que vous pouvez remplacer. Donc, vous n'appelez pas un auditeur;)

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

Si vous utilisez Toolbar (Android.support.v7.widget.Toolbar) et le SearchView (Android.support.v7.widget.SearchView) associé, cela fonctionne: 

    searchView.setQuery("", false);
    searchView.clearFocus();
    searchView.setIconified(true);
11
hakobyanheghine

Vous devez effacer la recherche, supprimer le focus, puis appeler:

searchView.setIconified(true);
6
Stephane

Cela a fonctionné pour moi et a également fermé le clavier par défaut

MenuItemCompat.collapseActionView(menuItem);
3
Bala Vishnu

Retourner false aurait dû être suffisant selon la dernière documentation et le code sourceifficonifiedByDefault == true.

Avez-vous par hasard défini iconifiedByDefault="false" ou appelé setIconifiedByDefault(false)?

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

Ça marche pour moi.

1
LunaElf

J'ai changé le bouton 'Go' en 'Suivant', donc la seule méthode qui a fonctionné pour moi (sur l'API 19) est la frappe closeBtn.performClick();closeBtn.performClick(); (En cliquant sur le bouton 'fermer' deux fois) dans la OnEditorActionListener de la AutoCompleteTextView. Vous pouvez obtenir la AutoCompleteTextView comme ceci:

LinearLayout linearLayout1 = (LinearLayout) searchView.getChildAt(0);
LinearLayout linearLayout2 = (LinearLayout) linearLayout1.getChildAt(2);
LinearLayout linearLayout3 = (LinearLayout) linearLayout2.getChildAt(1);
AutoCompleteTextView autoComplete = (AutoCompleteTextView) linearLayout3.getChildAt(0);
0

Cela a fonctionné pour moi searchMenuItem.collapseActionView();

0
inkedTechie