我有一个自定义自动完成功能,它根据输入从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