在EditText上输入密钥,按两次onKey

时间:2010-12-22 21:24:11

标签: android

我已将OnKeyListener附加到EditText。我已经覆盖onKey处理程序来捕获KeyEvent。

当用户点击回车键时(他们的计算机在使用模拟器时输入密钥,或硬件使用硬件键盘在手机上输入密钥),onKey处理程序将被执行两次。两个执行都有keyCode 66。

为什么会这样?

我想要我的屏幕,所以当用户点击回车键时,会执行搜索。由于发生了什么,搜索不必要地发生了两次。

我的方法如下:

   mFilter.setOnKeyListener(new View.OnKeyListener() {

        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                // perform search
                return true;
            }
            return false;
        }
    });

7 个答案:

答案 0 :(得分:23)

AHHHH

我认为这会发生在按键和按键状态下?

答案 1 :(得分:16)

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {

答案 2 :(得分:11)

试试这个:

mFilter.setOnKeyListener(new View.OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (keyCode == KeyEvent.KEYCODE_ENTER) {
                // perform search
                return true;
            }
        }
        return false;
    }
});

答案 3 :(得分:7)

你可以像这样过滤:

object.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                // do stuff
                return true;
            }

            return false;
        }
    });
使用KeyEvent.ACTION_DOWN

按下键时的

idem

答案 4 :(得分:4)

我遇到了同样的问题,上面的答案对我有帮助,但我使用的是Xamarin.Android(c#),所以它的语法略有不同..这对我有用:

MyStringTextBox.KeyPressed += OnEnterKeyPressed;

protected void OnEnterKeyPressed(object sender, View.KeyEventArgs e)
{
    if (e.KeyCode == Keycode.Enter && e.Event.Action == KeyEventActions.Up)
    {
        DoSomething(this, EventArgs.Empty);
    }
    else
    {
        e.Handled = false;
    }
}

这样,DoSomething()只会在按Enter键(Up)时被调用,因此会被触发一次。在Xamarin.Android上运行和测试

答案 5 :(得分:0)

此事件由KeyEvent.ACTION_DOWNKeyEvent.ACTION_UP触发。 我已经完成了调试,最后我意识到有一个名为KeyEvent event的参数我从未使用过,然后我检查并发现了问题。

答案 6 :(得分:0)

我调试了,对我有用的是

editText.setOnKeyListener(View.OnKeyListener { view, i, keyEvent ->
            if (i == KeyEvent.KEYCODE_ENTER && enterAsSend && (keyEvent.action == KeyEvent.ACTION_UP || keyEvent.action == KeyEvent.ACTION_DOWN)) {
                //Do stuff
                }
                return@OnKeyListener true
            }
            false
        })

并在您的Editext中检出android:inputType="textNoSuggestions",因为首先单击Enter键会给我们字典中的建议。