我已经将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;
}
});
Run Code Online (Sandbox Code Playgroud)
小智 16
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction()==0) {
Run Code Online (Sandbox Code Playgroud)
小智 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;
}
});
Run Code Online (Sandbox Code Playgroud)
你可以像这样过滤:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
使用KeyEvent.ACTION_DOWN按下键时的同义词
我遇到了同样的问题,上面的答案对我有帮助,但我使用的是 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;
}
}
Run Code Online (Sandbox Code Playgroud)
这样,DoSomething() 只会在按下 Enter 键 (Up) 时被调用,因此会被触发一次。在 Xamarin.Android 上工作和测试
| 归档时间: |
|
| 查看次数: |
12383 次 |
| 最近记录: |