我有一個自定義自動完成功能,它根據輸入從onQueryTextChange
方法中的遠程服務器獲取結果。它類似於JQuery自動完成插件,它通過Ajax在關鍵字偵聽器上獲取結果。如何檢測用戶是否只是在SearchView.setOnQueryTextListener中按下退格鍵(刪除)?
但是,當用戶剛剛按下backspace
刪除他先前輸入的輸入文本時,獲取結果相當浪費,因爲返回的結果通常與我的情況相同。我怎樣才能防止這種情況發生?
我一直在使用一個全局布爾變量backKeyPressed
來檢測用戶是否按下backspace
並檢查它在onQueryTextChange
但setOnKeyListener
甚至沒有在所有的工作嘗試。 logcat中甚至沒有顯示「onKey」的日誌。
有沒有人有任何想法如何檢測退格鍵是否按下onQueryTextChange
?
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;
}
});
}
如果用戶按退格鍵通常你應該得到更多的結果,是嗎?那麼這是什麼原因? – pskink
你使用軟鍵盤嗎?因爲OnKeyListener不起作用。 http://stackoverflow.com/q/4886858/2252016 – 1binary0
@ 1binary0,啊是的,我正在使用軟鍵盤 – RedGiant