Android:getText和setText在使用onKeyListener的EditText上不起作用

问题描述

|| 我正在使用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。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...