美文网首页
解决自定义EditText控件onKey方法执行两次的问题

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

作者: 进击的阿达 | 来源:发表于2017-03-24 20:45 被阅读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;
    }
    

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/hrqqottx.html