【问题标题】:Android: getText and setText not working on EditText with onKeyListenerAndroid:getText 和 setText 无法使用 onKeyListener 处理 EditText
【发布时间】:2011-06-13 22:15:41
【问题描述】:

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

【问题讨论】:

    标签: android android-edittext gettext settext


    【解决方案1】:

    当您将 OnKeyListener 设置为您的 EditText3 时,您将替换当您按下某个键时发生的情况。在 onKey 的末尾尝试return false;。这应该将值传递到正确的位置。

    http://developer.android.com/reference/android/view/View.OnKeyListener.html

    返回

    如果监听器已经消费了事件则为真,否则为假。

    【讨论】:

    • 很抱歉我应该提到(或放入示例代码)我在 onKey 方法结束时返回 false。
    • @Mark,你的建议就是答案,它解决了问题!谢啦!您能否将您的评论放入问题的答案中,以便我将其标记为答案?
    【解决方案2】:

    除了 Chris 的回答之外,还应添加检查以确保 event.getAction() 等于 KeyEvent.ACTION_UP; onKey 被调用两次,如果 getAction() 为 ACTION_DOWN(第一次调用该方法),则该字符尚未添加到 getText() 返回的 CharSequence。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 2012-02-17
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多