问题描述
||
我正在使用Android应用程序,并具有3个EditTexts的视图。我要实现的目标是,在最后一个数字键被按下时,应为此活动调用okKey事件。问题是,对于我在其上设置onKeyListener的EditText,getText和setText方法均不起作用。请允许我解释一下:
假设我初始化一个空字符串
String string1 = \"\";
在我的onCreate方法中,将onKeyListener设置在EditText之一上
@Override
public void onCreate(Bundle savedInstanceState) {
...
findViewById(R.id.EditText3).setonKeyListener(this);
...
}
现在,如果我在重写的okKey方法中编写以下代码
@Override
public boolean onKey(View v,int keyCode,KeyEvent event) {
if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
string1 += ((EditText) findViewById(R.id.EditText1)).getText();
string1 += ((EditText) findViewById(R.id.EditText2)).getText();
string1 += ((EditText) findViewById(R.id.EditText3)).getText();
((EditText) findViewById(R.id.EditText1)).setText(\"\");
((EditText) findViewById(R.id.EditText2)).setText(\"\");
((EditText) findViewById(R.id.EditText3)).setText(\"\");
}
return false;
}
仅清除EditText1和EditText2,并且EditText3中的文本不会串联到string1。如果我将If语句的条件替换为
if (keyCode == KeyEvent.KEYCODE_ENTER)
然后按Enter键(设置为“下一步”),即可按预期工作。我也尝试在活动的onResume方法中添加setText(\“ \”),但结果没有区别。感谢您花时间阅读我的问题!
编辑:在onKey方法的末尾添加了“ return false; \”,我在工作中使用了它,但是错过了将其放在这个问题中,这使Chris的答案提醒了我。
解决方法
除了克里斯的答案外,还应添加检查以确保event.getAction()等于KeyEvent.ACTION_UP;。 onKey被调用两次,并且如果getAction()为ACTION_DOWN(第一次调用该方法),则该字符尚未添加到getText()返回的CharSequence中。
, 当您将OnKeyListener设置为EditText3时,您将用它来敲击键替换掉发生的事情。在onKey的末尾尝试ѭ4。这应该将值传递到正确的位置。
http://developer.android.com/reference/android/view/View.OnKeyListener.html
退货
如果侦听器已消耗事件,则为true,否则为false。