Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在编辑中输入键文本按两次键_Android - Fatal编程技术网

Android 在编辑中输入键文本按两次键

Android 在编辑中输入键文本按两次键,android,Android,我已将OnKeyListener附加到EditText。我已经重写了onKey处理程序来捕获一个KeyEvent 当用户按enter键(使用emulator时,他们的计算机按enter键,或使用硬件键盘的手机上的硬件按enter键)时,onKey处理程序将执行两次。两次执行都有键码66 为什么会这样 我想要我的屏幕,因此当用户点击enter键时,将执行搜索。由于正在发生的事情,搜索不必要地发生了两次 我的方法如下所示: mFilter.setOnKeyListener(new View.O

我已将OnKeyListener附加到EditText。我已经重写了onKey处理程序来捕获一个KeyEvent

当用户按enter键(使用emulator时,他们的计算机按enter键,或使用硬件键盘的手机上的硬件按enter键)时,onKey处理程序将执行两次。两次执行都有键码66

为什么会这样

我想要我的屏幕,因此当用户点击enter键时,将执行搜索。由于正在发生的事情,搜索不必要地发生了两次

我的方法如下所示:

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

我认为上键和下键都会出现这种情况?

试试这个:

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {
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;
    }
});

您可以这样进行筛选:

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_按下键时,我也遇到了同样的问题,上面的答案对我有帮助,但我使用的是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键(向上)时被调用,因此将触发一次。在Xamarin.Android上运行并测试此事件由
KeyEvent.ACTION\u DOWN
KeyEvent.ACTION\u UP
触发。
我已经完成了调试,最后我意识到有一个名为
KeyEvent-event
的参数我从未使用过,然后我检查并发现了问题。

我调试过,对我有效的是

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
        })

然后签出您的editText,该editText
android:inputType=“textNoSuggestions”
,因为第一次单击enter键会给我们字典中的建议。

可能。检查
键事件
,而不仅仅是代码。我发现历史上HTC键盘有时会触发多个事件(有时用户会突然弹出并多次点击“回车”),因此您可能希望在侦听器中保留一个实例变量,以便跟踪动作何时触发,从而防止意外的第二次触发。好主意。我认为,当搜索任务启动时,我将启动另一个任务,计时器为几秒钟,直到该线程完成,用户将无法再次按enter键。这不应标记为答案,请将以下一个(更有用)答案标记为答案(我推荐Abdul的)。谢谢。这是“向下键”的意思,只要用户按住它,就会生成。