我有一个Editext,在这里我执行的验证效果很好,但是在按空格时,msg出现了Disapper。任何人都可以指出我们做错了什么。
请找到下面的图片,以更清楚:
按下空格键后:
我们正在使用以下代码:
txtFullName.addTextChangedListener(new MyTextWatcher(txtFullName));
txtEmail.addTextChangedListener(new MyTextWatcher(txtEmail));
private class MyTextWatcher implements TextWatcher {
private View view;
private MyTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void afterTextChanged(Editable editable) {
switch (view.getId()) {
case R.id.txtFullName:
if (txtFullName.getText().toString().length() >= 10) {
txtFullName.setError(getString(R.string.limit_exceeds));
txtFullName.requestFocus();
}
break;
case R.id.txtEmail:
if (txtEmail.getText().toString().length() >= 20) {
txtEmail.setError(getString(R.string.limit_exceeds));
txtEmail.requestFocus();
}
break;
default:
break;
}
}
你应该做的是这样的
我希望我的editext不应超过10个字符...如果使用它会显示一些错误
可能重复的编辑文本最大长度并在texview中显示长度
原始答案
根据屏幕截图,输入的文本为10个字符。
按下空格键会将txtEmail.getText().toString().length()设置为11,再添加一个字符,并触发TextWatcher,仅当文本为10个字符或更短时,才会显示错误。 strike>
如果edittext值大于10,将显示错误消息
您是否要创建两个不同的实例TextWatchers? 每个EditText一个? 那里有些奇怪。 您正在从TextWatcher内部调用txtEmail和txtFullName,而没有作为参数或构造函数传递。 请粘贴所有代码
因此,您的逻辑仅基于其中一个视图,因为您正在执行switch (view.getId()),因此该视图始终是同一视图。
输入10个字符后会发生错误,出现msg错误消息;当我按下另一个字符时,将调用textwatcher,但如果按下"空格",则不会调用textwatcher,并且错误消息消失了
没有使用相同的TextWatcher,您只是在顶部添加了该代码。 有两个不同的TextWatcher实例