2013-04-13 44 views
5

Tôi đang cố gắng sử dụng SearchView và tôi có mọi thứ để làm việc, ngoại trừ khi tôi muốn tìm kiếm một chuỗi trống.
OnQueryTextChange không phản ứng khi tôi xóa ký tự cuối cùng, nhưng tôi muốn người dùng có thể nhấn nút tìm kiếm khi trường tìm kiếm trống.Android SearchView chuỗi trống

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

Tôi cũng đã thử sử dụng OnKeyListner. nhưng nó dường như không hoạt động.

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

       //Do something 
       return true; 
      } 
     }); 

Điều này có vẻ đơn giản như vậy nhưng tôi không thể làm việc đó. Bất kỳ đề xuất?

Sửa

tôi đã tìm kiếm một giải pháp cho một thời gian bây giờ và chỉ vài phút sau khi công bố này, tôi tìm thấy một giải pháp.
Về chủ đề này, tôi phát hiện ra đây không phải là một lỗi, nhưng nó thực sự là cố ý.

Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

Vì vậy, tôi chỉ cần tải về ActionBarSherlock và thực hiện một số thay đổi cho onSubmitQuery phương pháp()

Từ

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

Và phiên bản sửa đổi

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 nếu có ai khác có pr này oblem.

+1

Thay vì chỉnh sửa câu hỏi ban đầu, bạn có thể trả lời câu hỏi của riêng mình. – theblang

Trả lời

0

Có lẽ nó không phù hợp cho ứng dụng của bạn nhưng bạn cũng có tùy chọn sử dụng đơn giản EditText, sau đó thêm một người nghe TextWatcher. Bằng cách này, bạn nắm bắt mọi đầu vào ngay cả khi người dùng nhập một chuỗi rỗng.

0

tôi đã cùng một vấn đề với SearchView nhưng tôi không muốn sử dụng ActionBarSherlock vì vậy tôi đã đưa ra giải pháp trong đó bao gồm phong cách SearchView của riêng bạn như trong hướng dẫn http://novoda.com/blog/styling-the-actionbar-searchview/ và thiết OnEditorActionListener cho EditText (How do I trigger an action when the user has hit enter?) mà là một phần của 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; 

    }); 
Các vấn đề liên quan