今天自己写了一个搜索框,在写关联软键盘的回车按键时出现了连续执行两次的情况。
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER);
if (pressSearch && listener != null) {
if (TextUtils.isEmpty(getText().toString())) {
Toast.makeText(getContext(), "请输入关键字", Toast.LENGTH_SHORT).show();
}
/*隐藏软键盘*/
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
listener.onSearchClick(v);
}
return false;
}
开始以为是执行了两次监听软键盘按键事件的onSearchClick()方法
后来发现是因为在按下软键盘回车键时产生了up和down两种KeyEvent事件
所以只要在判断中加上 event.getAction() == KeyEvent.ACTION_UP 就可以解决了
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
pressSearch = (keyCode == KeyEvent.KEYCODE_ENTER);
if (pressSearch && listener != null && event.getAction() == KeyEvent.ACTION_UP) {
if (TextUtils.isEmpty(getText().toString())) {
Toast.makeText(getContext(), "请输入关键字", Toast.LENGTH_SHORT).show();
}
/*隐藏软键盘*/
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
listener.onSearchClick(v);
}
return false;
}
欢迎各位同学留言交流。
新手上路,还望多多指教。