2013-04-13 8 views
5

J'essaie d'utiliser un SearchView et j'ai tout fait fonctionner, sauf quand je veux rechercher une chaîne vide.
L'onQueryTextChange réagit lorsque je supprime le dernier caractère, mais je souhaite que l'utilisateur puisse appuyer sur le bouton de recherche lorsque le champ de recherche est vide.Android SearchView chaîne vide

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

J'ai également essayé d'utiliser un OnKeyListner. mais cela ne semble pas fonctionner non plus.

  searchView.setOnKeyListener(new OnKeyListener() { 
      @Override 
      public boolean onKey(View arg0, int arg1, KeyEvent arg2) { 

       //Do something 
       return true; 
      } 
     }); 

Cela semble une chose si simple à faire, mais je n'arrive pas à le faire fonctionner. Aucune suggestion?

Modifier

J'ai cherché une solution pour un certain temps maintenant et que quelques minutes après la publication, je trouve une solution.
Sur ce fil, j'ai découvert que ce n'était pas un bug, mais c'était délibéré.

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

Je viens de télécharger ActionBarSherlock et fait quelques modifications à la méthode onSubmitQuery()

De

private void onSubmitQuery() { 
    CharSequence query = mQueryTextView.getText(); 
    if (query != null && TextUtils.getTrimmedLength(query) > 0) { 
     if (mOnQueryChangeListener == null 
       || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { 
      if (mSearchable != null) { 
       launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); 
       setImeVisibility(false); 
      } 
      dismissSuggestions(); 
     } 
    } 
} 

Et la version modifiée

private void onSubmitQuery() { 
    CharSequence query = mQueryTextView.getText(); 
    if(query == null) {query = "";} 
    if (mOnQueryChangeListener == null 
       || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) { 
     if (mSearchable != null) { 
       launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString()); 
       setImeVisibility(false); 
     } 
     dismissSuggestions(); 
    } 
} 

Hope this helps si quelqu'un d'autre a ce pr oblem.

+1

Plutôt que d'éditer votre question originale, vous pouvez répondre à votre propre question. – theblang

Répondre

0

Peut-être que ce n'est pas adapté à votre application, mais vous avez également la possibilité d'utiliser un simple EditText, puis d'ajouter un écouteur TextWatcher. De cette façon, vous attrapez chaque entrée même si l'utilisateur entre une chaîne vide.

0

J'ai eu même problème avec SearchView mais je ne voulais pas utiliser ActionBarSherlock donc je suis venu avec une solution qui consiste à coiffer vos propres SearchView comme indiqué dans le guide http://novoda.com/blog/styling-the-actionbar-searchview/ et la mise en OnEditorActionListener pour EditText (How do I trigger an action when the user has hit enter?) qui fait partie du SearchView .

final SearchView searchView = (SearchView)findViewById(R.id.search); 
int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); 
searchPlate.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 

     if (actionId == EditorInfo.IME_ACTION_SEARCH) { 
      //Do something 
     } 
     return false; 

    }); 
Questions connexes