我有一个“当前密码”EditText和一个显示错误消息的错误TextView。我希望在EditText内容发生变化时清除错误消息,通常是当用户输入另一个字母或删除某些内容时。
即使系统打印消息,也不会清除错误TextView。只有在EditText失去焦点时才会清除TextView。
为什么会这样?这些方法是否在不同的线程上执行?用户输入字符后,如何立即清除TextView?
mCurrentPasswordEditText = (EditText) view.findViewById(R.id.current_password_edit_text);
mCurrentPasswordErrorTextView = (TextView) view.findViewById(R.id.current_password_error_text_view);
mCurrentPasswordEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//mCurrentPasswordErrorTextView.setText("");
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//mCurrentPasswordErrorTextView.setText("");
}
@Override
public void afterTextChanged(Editable s) {
System.out.println("called multiple times.");
mCurrentPasswordErrorTextView.setText("");
}
});
答案 0 :(得分:1)
解决方案非常奇怪。我认为这是一个错误!
我没有用空字符串“”替换TextView,而是添加了一个额外的空格“”,它立即清除了文本! * SMH
mCurrentPasswordEditText = (EditText) view.findViewById(R.id.current_password_edit_text);
mCurrentPasswordErrorTextView = (TextView) view.findViewById(R.id.current_password_error_text_view);
mCurrentPasswordEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//mCurrentPasswordErrorTextView.setText("");
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//mCurrentPasswordErrorTextView.setText("");
}
@Override
public void afterTextChanged(Editable s) {
mCurrentPasswordErrorTextView.setText(" ");
}
});