我有一个“当前密码”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("");
}
});
最佳答案
这个解决方案很奇怪。我认为这是一个错误!
我没有用空字符串“”替换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(" ");
}
});
关于java - 从 TextWatcher 方法中清除 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36668209/