Ich habe eine benutzerdefinierte Autocomplete-Funktion, die Ergebnisse von einem Remote-Server in der onQueryTextChange
Methode basierend auf der Eingabe abruft. Es ähnelt dem JQuery-Autocomplete-Plug-in, das Ergebnisse über Ajax auf Keyup-Listener abruft.Wie erkennt man, ob der Benutzer in SearchView.setOnQueryTextListener nur die Rücktaste (delete) drückt?
Es ist jedoch eine ziemliche Verschwendung, Ergebnisse abzurufen, wenn der Benutzer gerade backspace
drückt, um den Eingabetext zu löschen, den er zuvor eingegeben hat, da die zurückgegebenen Ergebnisse in meiner Situation normalerweise gleich sind. Wie kann ich das verhindern?
Ich habe versucht, eine globale boolean Variable backKeyPressed
zu erkennen, ob der Benutzer backspace
drücken und überprüfen Sie es in onQueryTextChange
aber setOnKeyListener
nicht einmal bei allen. Im logcat wurden keine Protokolle für "onKey" angezeigt.
Hätte jemand Ideen, wie man erkennt, ob die Rücktaste in onQueryTextChange
gedrückt wird?
private boolean backKeyPressed = false;
private Runnable autoCompleteRunnable;
private Handler = new Handler(Looper.getMainLooper());
private String enteredSuggestion = "";
public boolean onCreateOptionsMenu(Menu menu) {
/****************/
searchView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
backKeyPressed = true;
}else{
backKeyPressed = false;
}
Log.d("onKey",Boolean.toString(backKeyPressed));
return false;
}
});
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
/**Some functions**/
return false;
}
@Override
public boolean onQueryTextChange(final String inputText) {
handler.removeCallbacks(autoCompleteRunnable);
if(enteredSuggestion.trim().equals(inputText.trim())){
Log.d("response_on_duplicated","true");
return false;
}
if(backKeyPressed == true){
Log.d("response_onKey","No");
return false;
}
autoCompleteRunnable = new Runnable() {
public void run() {
fetchSuggestionFromRemoteServer(inputText);
}
};
handler.postDelayed(autoCompleteRunnable, 3000);
enteredSuggestion = inputText;
return false;
}
});
}
Wenn der Benutzer normalerweise die Rücktaste drückt, sollten Sie mehr Ergebnisse erhalten, oder? Was ist der Grund dafür? – pskink
Verwenden Sie Soft-Tastaturen? weil OnKeyListener nicht funktioniert. http://stackoverflow.com/q/4886858/2252016 – 1binary0
@ 1binary0, ah ja, ich benutze Soft-Tastaturen – RedGiant