2011-04-19 1 views
11

J'utilise une vue de recherche dans mon application. Maintenant, je veux juste obtenir le texte tapé dans la zone de texte searchview et l'afficher sur un autre textview.if j'ai tapé le texte et cliquez sur un bouton je peux faire la même chose.mais je ne veux pas utiliser des boutons supplémentaires.je veux juste afficher le résultat quand je suis en appuyant sur entrer key.plz quelqu'un m'aider .. (si votre suggeting tout les auditeurs plz me fournir le code)comment obtenir les événements de searchview dans android

+0

j'ai essayé beaucoup d'auditeurs, mais aucun d'entre eux r working.i DNT KNW raison d ... –

Répondre

32

Essayez d'utiliser setOnQueryTextListener de SearchView

new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextChange(String newText) { 
     // your text view here 
     textView.setText(newText); 
     return true; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     textView.setText(query); 
     return true; 
    } 
} 
+1

j'ai essayé this.but il ne travaille pas .... –

+2

Cela fonctionne bien. Vous devez d'abord ajouter un écouteur à votre recherche. – Asim

+1

Non, écouteur ou non, onQueryTextSubmit ne fonctionne pas lorsque la chaîne entrée est vide. –

16

La réponse ci-dessus est bonne, mais pas réellement complète besoin de définir un écouteur d'action pour votre point de vue de la recherche. vous pouvez le faire de deux façons de créer une classe qui implémente les classes nécessaires pour être un OnQueryTextListener et faire un nouvel objet de cela et l'utiliser comme votre point de vue de la recherche d'écoute texte de la requête ou utilisez la forme compacte suivante:

 SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
      @Override 
      public boolean onQueryTextSubmit(String query) { 
       callSearch(query); 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
//    if (searchView.isExpanded() && TextUtils.isEmpty(newText)) { 
        callSearch(newText); 
//    } 
       return true; 
      } 

      public void callSearch(String query) { 
       //Do searching 
      } 

     }); 
5

il peut également être fait avec RXAndroid et RxBinding par Jake Wharton comme ceci:

RxSearchView.queryTextChanges(searchView) 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Action1<CharSequence>() { 
       @Override 
       public void call(CharSequence charSequence) { 
        if(charSequence!=null){ 
         // Here you can get the text 
         System.out.println("SEARCH===" + charSequence.toString()); 
        } 
       } 
      }); 
code

est abonnée à observer le changement de texte avec un certain retard de 500 millisecondes.

Ceci est un lien vers repo git pour obtenir RXAndroid: https://github.com/JakeWharton/RxBinding

Questions connexes