comment changer le texte Android SearchView

91

Existe-t-il une méthode setText () pour SearchView ou quelque chose comme ça? J'essaie de définir le texte de recherche dans le searchView comme ceci mais il n'y a pas de méthode pour cela.

searchView.setText(searchToken);
Khaled Annajar
la source

Réponses:

164

Après m'être demandé et essayé, j'ai découvert qu'il existe une méthode dans l'API nommée setQuery () dans laquelle vous définissez le texte searchView et que vous pouvez choisir de soumettre la recherche ou de ne pas utiliser le paramètre booléen.

searchView.setQuery(searchToken, false);
Khaled Annajar
la source
3
Même après avoir défini le paramètre booléen sur false, il interroge à nouveau. Toutes les suggestions seraient utiles.
Raj Trivedi
J'ai fait cela, mais en définissant le 2ème paramètre sur truepour que la requête soit également exécutée, mais notez que bien que la requête soit bien exécutée, la zone de texte reste vide, jusqu'à ce que le focus soit manuellement. Comment puis-je m'assurer que la valeur définie automatiquement s'affiche également automatiquement?
nemesisfixx
1
c'est bon. le deuxième argument est "soumettre"
roghayeh hosseini
33

Vous pouvez utiliser setQuery()pour modifier le texte dans la zone de texte.

Cependant, la setQuery()méthode déclenche l'état de mise au point d'une vue de recherche, de sorte qu'un clavier s'affiche à l'écran une fois que cette méthode a été appelée.

Pour résoudre ce problème, appelez simplement la méthode searchView.clearFocus()après setQuery()pour la déconcentrer et le clavier ne s'affichera pas à l'écran.

Exemple:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
kunemata
la source
Ne s'affiche pas depuis l'écriture searchView.setIconified (false); spectacle .
lolo_house
7

Si vous voulez pré-enregistrer votre SearchViewavec du texte, searchView.setQuery(text, false)cela ne fonctionnera pas immédiatement. la raison est quand SearchViewse développe

searchView.onActionViewExpanded()

obtenir appelé qui appelle searchView.setText("")et efface tout texte que nous avons défini.

La solution consiste à définir un écouteur Expand et à définir le texte de pré-fichier une fois que le SearchViewfichier est développé

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.main, menu)
    val searchView = menu.findItem(R.id.action_search).actionView as SearchView
    menu.findItem(R.id.action_search).setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
            // it is important to call this before we set our own query text.
            searchView.onActionViewExpanded()
            searchView.setQuery("Prefil Text", false)
            return true
        }

        override fun onMenuItemActionCollapse(item: MenuItem?) = true
    })
    return true
}
Max
la source
6

C'est ce qui a fonctionné pour moi

    MenuItem sItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) sItem.getActionView();

    sItem.expandActionView();
    searchView.setQuery("your text", false);
Wowo Ot
la source
1
solution de sauvetage simple et rapide!
eren130 le
0

Si vous voulez que le searchView se développe et qu'il puisse être réduit à une icône après que l'utilisateur ait tapé x (fermer), la manière est:

searchView.isIconified = false // Expand it
searchView.setQuery("your text here", false) // true if you want to submit, otherwise false
searchView.clearFocus() // so the keyboard is not show up.

REMARQUE: si vous le développez en utilisant:

searchView.onActionViewExpanded()

searchView ne rétrécira pas après que l'utilisateur ait appuyé sur x (fermer)

Putra Hardjono
la source