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