2015-12-10 10 views
5

Dlaczego metoda onQueryTextSubmit w SearchView jest przetwarzana dwa razy? Potrzebuję jednego wyniku, jak mogę to zrobić?The onQueryTextSubmit w SearchView jest przetwarzany dwa razy w systemie Android Java

To jest mój kod:

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

Odpowiedz

9

Można użyć następującego kodu, aby zapobiec onQueryTextSubmit z coraz wykonywany dwukrotnie:

searchView.clearFocus();

+0

dzięki, już to zrobiłem, ale zapomniałem o tym napisać :) –

0

spróbować wywołać metodę po tekst zmienił się ten

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

nic się nie zmieniło ponownie :( –

1

I t generuje dwa wyjścia po wprowadzeniu z klawiatury emulatora, ale tworzy pojedyncze wyjście po kliknięciu przycisku wyszukiwania na klawiaturze emulatora. Myślę więc, że nie powinieneś się o to martwić. Na wszystkich telefonach komórkowych i tabletach ten błąd może się nie wydarzyć.

Ale, searchView.clearFocus(); również działa tutaj.

1

Dla każdego, kto zmaga się z tym samym numerze, oto co dokumentacja mówi o metodzie onQueryTextSubmit(String query)here:

Słuchacz może zastąpić standardowe zachowanie wracając wierny wskazują, że zajmował się złożyć żądanie.

Więc po prostu zastąpić return false przez return true:

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

Chcesz przeszukać więcej niż 1 słowo?

searchView.setOnQueryTextListener (nowa SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit (zapytanie String) {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; 
     } 
    }); 
Powiązane problemy