解决自定义EditText控件onKey方法执行两次的问题

2017-03-24  本文已影响72人  进击的阿达

今天自己写了一个搜索框,在写关联软键盘的回车按键时出现了连续执行两次的情况。

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

欢迎各位同学留言交流。
新手上路,还望多多指教。

上一篇下一篇

猜你喜欢

热点阅读