2015-12-10 13 views
5

Perché il metodo onQueryTextSubmit in SearchView viene elaborato due volte? Ho bisogno di un risultato, come posso farlo?L'onQueryTextSubmit in SearchView viene elaborato due volte in Android Java

Questo è il mio codice:

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

risposta

9

È possibile utilizzare il seguente codice per impedire onQueryTextSubmit di ottenere eseguito due volte:

searchView.clearFocus();

+0

grazie, l'ho già fatto, ma ho dimenticato di scriverlo :) –

0

tenta di chiamare il metodo dopo il testo è cambiato in questo modo

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

nulla è cambiato ancora una volta :( –

1

I t genera due uscite quando vengono immesse dalla tastiera sull'emulatore ma crea una singola uscita quando si fa clic sul pulsante di ricerca sulla tastiera dell'emulatore. Quindi, penso che non dovresti preoccuparti di questo. Su tutti i telefoni cellulari o tablet, questo errore potrebbe non verificarsi.

Ma searchView.clearFocus(); Funziona anche qui.

1

Per tutti coloro che sono alle prese con lo stesso problema, ecco cosa dice la documentazione circa la onQueryTextSubmit(String query) metodo here:

L'ascoltatore può ignorare il comportamento standard ritornando fedele a indicare che ha gestito il submit richiesta.

Quindi è sufficiente sostituire return false da return true:

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

desidera cercare più di 1 parola?

searchView.setOnQueryTextListener (nuova SearchView.OnQueryTextListener() { @Override pubblico onQueryTextSubmit booleano (query 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; 
     } 
    }); 
Problemi correlati