2013-04-13 21 views
5

Próbuję użyć SearchView i mam wszystko do pracy, z wyjątkiem sytuacji, gdy chcę przeszukać pusty ciąg znaków.
Funkcja onQueryTextChange reaguje, gdy usuwam ostatni znak, ale chcę, aby użytkownik mógł nacisnąć przycisk wyszukiwania, gdy pole wyszukiwania jest puste.Android SearchView pusty ciąg

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

Próbowałem również użyć OnKeyListner. ale to też nie działa.

To wydaje się być tak proste, ale nie mogę go uruchomić. Jakieś sugestie?

Edit

Szukałem rozwiązania na chwilę teraz i tylko kilka minut po wysłaniu tego, znalazłem rozwiązanie.
W tym wątku dowiedziałem się, że to nie był błąd, ale w rzeczywistości był celowy.

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

Więc po prostu pobrane ActionBarSherlock i kilka modyfikacji do onSubmitQuery() metoda

Od

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

i wersji zmodyfikowanej

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 jeśli ktokolwiek inny ma tę pr oblem.

+1

Zamiast edytować oryginalne pytanie, możesz odpowiedzieć na własne pytanie. – theblang

Odpowiedz

0

Być może nie jest to odpowiednie dla twojej aplikacji, ale możesz również użyć zwykłego EditText, a następnie dodać odbiornik TextWatcher. W ten sposób przechwycisz każde wejście, nawet jeśli użytkownik wprowadzi pusty ciąg.

0

miałem ten sam problem z SearchView ale nie chcą używać ActionBarSherlock więc wymyśliłem rozwiązanie, które polega na stylizacji własnej SearchView jak pokazano w przewodniku http://novoda.com/blog/styling-the-actionbar-searchview/ i ustawienie OnEditorActionListener dla EditText (How do I trigger an action when the user has hit enter?), który jest częścią 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; 

    });