2015-12-10 16 views
5

Tại sao phương pháp onQueryTextSubmit trong SearchView được xử lý hai lần? Tôi cần một kết quả, tôi có thể làm như thế nào?OnQueryTextSubmit trong SearchView được xử lý hai lần trong Android Java

Đây là mã của tôi:

public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      if (query != null) 
       audioRequest(query); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 
    return true; 
} 

Trả lời

9

Bạn có thể sử dụng đoạn mã sau để ngăn chặn onQueryTextSubmit từ nhận được thực hiện hai lần:

searchView.clearFocus();

+0

cảm ơn, tôi đã làm điều đó, nhưng tôi quên viết về nó :) –

0

cố gắng để gọi phương thức của bạn sau khi văn bản đã thay đổi như thế này

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      if (newText != null) 
       audioRequest(newText); 
      return false; 
     } 
    }); 
+0

có gì thay đổi một lần nữa :( –

1

I t tạo ra hai đầu ra khi được nhập từ bàn phím trên trình mô phỏng nhưng nó tạo ra đầu ra đơn khi được nhấp vào nút tìm kiếm trên bàn phím của trình mô phỏng. Vì vậy, tôi nghĩ bạn không nên lo lắng về điều này. Trên tất cả các điện thoại di động hoặc máy tính bảng, lỗi này có thể sẽ không xảy ra.

Nhưng, searchView.clearFocus(); cũng hoạt động ở đây.

1

Đối với tất cả những người đang phải vật lộn với vấn đề tương tự, đây là những gì các tài liệu nói về onQueryTextSubmit(String query) phương pháp here:

Người nghe có thể ghi đè lên các hành vi tiêu chuẩn bằng cách trả lại đúng với chỉ ra rằng nó đã xử lý các trình yêu cầu.

Vì vậy, chỉ cần thay thế return false bởi return true:

@Override 
public boolean onQueryTextSubmit(String query) { 
    if (query != null) 
     audioRequest(query); 
    return true; 
} 
0

Bạn muốn tìm kiếm nhiều hơn 1 chữ?

searchView.setOnQueryTextListener (SearchView.OnQueryTextListener mới() {@Override công onQueryTextSubmit boolean (String query) {return false;}

 @Override 
     public boolean onQueryTextChange(String newText) { 


      newText = newText.toLowerCase(); 

      final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>(); 

      for (int i = 0; i < wordcombimelist.size(); i++) { 

       final String text = wordcombimelist.get(i).toLowerCase(); 
       if (text.contains(newText)) { 

        filteredList.add(new DictObjectModel(wordcombimelist.get(i),meancombimelist.get(i))); 
       } 
      } 
      adapter = new CustomAdapter(filteredList); 
      recyclerView.setAdapter(adapter); 


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