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.
Au lieu de cela, il se réduit mais reste dans une vue légèrement développée.
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".
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.
Au lieu d'appeler _searchView.onActionViewCollapsed()
, appelez menuItem.collapseActionView()
où _searchView = menuItem.getActionView()
.
@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();
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);
Vous devez effacer la recherche, supprimer le focus, puis appeler:
searchView.setIconified(true);
Cela a fonctionné pour moi et a également fermé le clavier par défaut
MenuItemCompat.collapseActionView(menuItem);
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)
?
searchView.setIconified(true); // Call this twice
searchView.setIconified(true);
Ça marche pour moi.
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);
Cela a fonctionné pour moi searchMenuItem.collapseActionView();