我想知道验证表单的最佳方法是什么?
我确实尝试了以下内容:
EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString;
if(fname_text.equalsIgnoreCase(""))
{
fname.setError("Field is required");
}
还有:
fname.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count){
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after){
}
@Override
public void afterTextChanged(Editable s)
{
Pattern mPattern = Pattern.compile("[A-Za-z]{2,20}$");
Matcher matcher = mPattern.matcher(s.toString());
if(!matcher.matches()) // on Success
{
fname.setError("Please make sure you input a valid first name");
}
}
});
我感到困惑的是......每当第一次加载页面时,都会显示错误消息,但是当我进入EditText并输入一些内容时,如果我删除内容,错误消息不会持久。那么如何保持此验证持久???因为程序的形成方式,看起来它不会很好地验证任何东西。你们知道Android中正则表达式的一些很好的链接,请完整的例子,请做推荐。
而且,我如何将onTextChanged或beforeTextChanged中的Pattern和Matcher方法影响输出?
答案 0 :(得分:1)
而不是在
之后立即运行检查EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString;
使用OnFocusChangeListener并在调用onFocusChange()方法时运行它。理想情况下,只有在View失去焦点时才会运行它。类似的东西:
EditText fname = (EditText)findViewById(R.id.first_name);
String fname_text = fname.getText().toString;
fname.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View arg0, boolean arg1) {
if(!(v.isFocused())) {
//Run your validation
}
}
});
这样,您只需在用户完成输入时运行验证,而不是每次用户更改时都运行验证。