2013-04-13 14 views
5

Ich versuche, eine SearchView zu verwenden, und ich habe alles funktioniert, außer wenn ich eine leere Zeichenfolge suchen möchte.
Der onQueryTextChange reagiert nicht, wenn ich das letzte Zeichen entferne, aber ich möchte, dass der Benutzer die Suchschaltfläche drücken kann, wenn das Suchfeld leer ist.Android SearchView leere Zeichenfolge

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

Ich habe auch versucht, einen OnKeyListner zu verwenden. aber es scheint auch nicht zu funktionieren.

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

       //Do something 
       return true; 
      } 
     }); 

Das scheint so eine einfache Sache zu tun, aber ich kann es nicht zur Arbeit bekommen. Irgendwelche Vorschläge?

bearbeiten

Ich habe jetzt eine Lösung für eine Weile sah und nur ein paar Minuten, nachdem dieses Posting, fand ich eine Lösung.
Auf diesem Thread fand ich heraus, dass dies kein Fehler war, aber es war tatsächlich absichtlich.

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

Also habe ich heruntergeladen ActionBarSherlock gerade und einige Änderungen an dem Verfahren onSubmitQuery gemacht()

Von

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

und die modifizierte Version

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

this helps wenn jemand anderes diesen pr Problem.

+1

Anstatt Ihre ursprüngliche Frage zu bearbeiten, können Sie Ihre eigene Frage beantworten. – theblang

Antwort

0

Vielleicht ist es nicht für Ihre App geeignet, aber Sie haben auch die Möglichkeit, eine einfache EditText zu verwenden, dann fügen Sie einen TextWatcher Listener hinzu. Auf diese Weise fangen Sie jede Eingabe ab, auch wenn der Benutzer eine leere Zeichenfolge eingibt.

0

ich gleiches Problem mit Suche hatte, aber ich wollte nicht ActionBarSherlock verwenden, so kam ich mit der Lösung auf die eigene Suche von Styling in Führung http://novoda.com/blog/styling-the-actionbar-searchview/ wie gezeigt besteht und Einstellung OnEditorActionListener für EditText (How do I trigger an action when the user has hit enter?), welchen Teil der Suche ist .

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; 

    }); 
Verwandte Themen