Android:getText和setText不能使用onKeyListener在EditText上工作

时间:2011-06-13 22:15:41

标签: android android-edittext gettext settext

我正在开发一个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方法的最后,我在工作中得到了它,但错过了将它放在这个问题中,克里斯的回答提醒了它。

2 个答案:

答案 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中。