2011-08-04 15 views
13

En mi aplicación, estoy usando la barra de acciones con una vista de búsqueda personalizada. Quiero utilizar un código personalizado cuando el usuario pulsa el botón Entrar en el campo de búsqueda. Pero no puedo encontrar la manera de captar el momento en que el usuario pulsa el botón Enter en SearchView.Android Crear acción personalizada SearchView Search

Ahora probé varias formas de capturar la acción de búsqueda pero parece que no puedo encontrarla.

Mi botón se define así:

<item 
    android:id="@+id/action_bar_search" 
    android:title="Search" 
    android:icon="@drawable/ic_menu_search" 
    android:showAsAction="always" 
    android:actionViewClass="-package-.CustomSearchView" 
    /> 

Con esto pertenece a la clase CustomSearchView:

public class CustomSearchView extends SearchView implements OnClickListener, android.view.View.OnKeyListener{ 

    public CustomSearchView(Context context) { 
     super(context); 
     this.setOnSearchClickListener(this); 
     this.setSubmitButtonEnabled(true); 
      this.setOnClickListener(this); 
     this.setOnKeyListener(this); 
    } 

    @Override 
    public void onClick(View v) { 

     Log.d("SEARCH", "Onclick! " + this.getQuery()); 
    } 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 

     Log.d("SEARCH", "Search onkey"); 
     return false; 
    } 

} 

Aquí se puede ver que `he intentado 2 enfoques:

  1. Capture el evento onclick desde el botón de enviar. Eso no funcionó ya que solo se disparó cuando hice clic en el icono de búsqueda para abrir el SearchView.
  2. Captura de las teclas dentro de SearchView. Eso tampoco funcionó . No obtuve respuesta de ninguna tecla que presioné allí.

¿Alguien tiene alguna manera de realizar una acción de búsqueda personalizada con este SearchView?

ACTUALIZACIÓN:

indicados a continuación por PJL: Usted no necesita un diálogo personalizado para anular este comportamiento. El widget normal de SearchView funcionará bien para esto.

Respuesta

46

Obtenga su vista de búsqueda y añadir un OnQueryTextListener

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextChange(String newText) { 
     // Do something 
     return true; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) { 
     // Do something 
     return true; 
    } 
}; 

searchView.setOnQueryTextListener(queryTextListener); 

Por cierto mi diseño del menú es el siguiente;

<item android:id="@+id/menu_search" 
    android:showAsAction="ifRoom" 
    android:actionViewClass="android.widget.SearchView" /> 
+0

¡Trabaja como un encanto! ¡Gracias por la ayuda! – Bart

+1

Excelente consejo, gracias por salvarme el dolor – Bostone

+1

Impresionante, lo usaré para realizar búsquedas dentro de un Fragmento sin iniciar una Actividad. Con la esperanza de obtener los mejores resultados: D – span

Cuestiones relacionadas