我需要对一系列 EditText 进行表单输入验证。我正在使用 OnFocusChangeListeners 在用户键入每个内容后触发验证,但这并不符合最后一个 EditText 的预期。
如果我在输入最终的 EditText 时单击“完成”按钮,则 InputMethod 将断开连接,但从技术上讲,EditText 上的焦点永远不会丢失(因此永远不会发生验证)。
什么是最好的解决方案?
我应该监控 InputMethod 何时与每个 EditText 解除绑定(bind),而不是何时更改焦点?如果有,怎么做?
最佳答案
你为什么不使用 TextWatcher
?
由于您有许多要验证的 EditText
框,我认为以下内容适合您:
- 您的 Activity 实现了
android.text.TextWatcher
接口(interface) - 您将 TextChanged 监听器添加到您的 EditText 框
txt1.addTextChangedListener(this);
txt2.addTextChangedListener(this);
txt3.addTextChangedListener(this);
- 在被覆盖的方法中,您可以使用
afterTextChanged(Editable s)
方法,如下所示
@Override
public void afterTextChanged(Editable s) {
// validation code goes here
}
Editable s
并不能真正帮助找到正在更改的 EditText 框的文本。但是您可以直接检查 EditText 框的内容,例如
String txt1String = txt1.getText().toString();
// Validate txt1String
同样的方法。我希望我很清楚,如果我清楚,它会有所帮助! :)
编辑: 要获得更简洁的方法,请参阅 Christopher Perry's answer下面。
关于Android:如何验证 EditText 输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2763022/