2011-04-19 15 views
11

estoy usando una vista de búsqueda en mi aplicación. Ahora solo quiero obtener el texto escrito en el cuadro de texto de la vista de búsqueda y mostrarlo en otra vista de texto. Si escribí el texto y hago clic en botón, puedo hacer lo mismo.pero no quiero usar ningún botón adicional.solo quiero mostrar el resultado cuando estoy presionando enter key.plz que alguien me ayude ... (si estás sugiriendo cualquier oyente por favor dame el código)cómo obtener los eventos de searchview en android

+0

he intentado muchos oyentes, pero ninguno de ellos r working.i razón d ... DNT KNW –

Respuesta

32

intenta utilizar 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

he intentado this.but que no está trabajando .... –

+2

Funciona bien. Primero debe agregar un oyente a su vista de búsqueda. – Asim

+1

No, oyente o no, onQueryTextSubmit no funciona cuando la cadena ingresada está vacía. –

16

La respuesta anterior es bueno, pero no completa realidad es necesario establecer un oyente de action para la vista de búsqueda. usted puede hacer esto de dos maneras crear una clase que implementa las clases necesarias para ser un OnQueryTextListener y hacer un nuevo objeto de eso y utilizarlo como su vista de búsqueda oyente texto de la consulta o utilizar la siguiente forma compacta:

 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

también se puede hacer con RXAndroid y RxBinding por Jake Wharton así:

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

Código está suscribiendo para observar el cambio de texto con un poco de retraso de 500 milisegundos.

Este es un enlace a git repo para obtener RXAndroid: https://github.com/JakeWharton/RxBinding

Cuestiones relacionadas