我正在开发一个Android应用程序并拥有一个包含3个EditTexts的视图。我想要实现的是,在最后一个按下的数字键上应该调用该活动的okKey事件。问题是,对于我设置onKeyListener的EditText,getText和setText方法都不起作用。请允许我解释一下:
假设我初始化一个空字符串
String string1 = "";
在我的onCreate方法中,我在其中一个EditTexts上设置onKeyListener
@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键(设置为Next),它按预期工作。我试图在活动的onResume方法中添加setText(“”),但结果没有区别。我很感谢您花时间阅读我的问题!
编辑:添加“return false;”在onKey方法的最后,我在工作中得到了它,但错过了将它放在这个问题中,克里斯的回答提醒了它。
答案 0 :(得分:1)
当您将EditKxt3设置为OnKeyListener时,您可以替换使用该键敲击键时发生的情况。在onKey的末尾尝试return false;
。这应该将值传递到正确的位置。
http://developer.android.com/reference/android/view/View.OnKeyListener.html
返回
如果监听器已经使用了该事件,则为true,否则为false。
答案 1 :(得分:0)
除了Chris的回答之外,还应该添加一个检查以确保event.getAction()等于KeyEvent.ACTION_UP; onKey被调用两次,如果getAction()是ACTION_DOWN(第一次调用该方法),该字符将不会被添加到getText()返回的CharSequence中。