我正在尝试在不触发提交按钮的情况下验证Edittext字段。EditText应该在用户输入数据时进行验证。我有一个验证器类,它工作得很好,但如何在不触发保存或提交按钮的情况下调用错误消息。我看过textwatcher和onkeylistener。但最好的方法是什么?
mUsername = (EditText) findViewById(R.id.EditTextUsername);
if(mUsername != null && DataUtil.checkDigits(mUsername))
{
mUsername.setError("enter one digit at least");
}
其中一种方法是您的活动实现android.text.TextWatcher
接口,然后您必须将TextChanged
侦听器添加到EditText
框中。
示例:
mUsername.addTextChangedListener(this);
然后覆盖afterTextChanged(Editable s)
方法,如下所示:
@Override
public void afterTextChanged(Editable s) {
// And you will place your validation code here
}
这将在任何更改时验证您的编辑文本(而不是单击或触摸按钮)。
TextWatcher似乎是更好的选择。
final EditText mUsername = (EditText) findViewById(R.id.editText1);
mUsername.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(DataUtils.checkDigits(mUsername)){
mUsername.setError("enter one digit at least");
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
希望能有所帮助。
您可以在下面尝试此代码
mEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//write your code
}
});
当你在EditText中输入完你的文本时,这个代码就会累积起来,这意味着当你关注其他视图时。。。因此,这是一个更好的解决方案,因为验证将在用户完成输入数据时运行,而不是为您输入的每个字符运行相同的代码。