У меня проблема с тем, что мне нужно отключить кнопку до тех пор, пока во всех полях edittext
не будут пустые допустимые данные. Я также хотел бы отключить отправку button
, если есть какое-либо пустое или пустое поле.
Часть моего лога c включает, например, что имя и второе имя пользователя должны иметь как минимум 3 символа, как показано.
Я могу проверить все поля edittext, используя TextWatcher afterTextChanged метод, но я не могу отключить кнопку, пока все данные не будут действительными.
Мой вопрос: как мне отключить мою кнопку, пока все логи c не будут проверены?
Ниже приведен мой код.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
email.addTextChangedListener(new EditTextWatcher(email));
password.addTextChangedListener(new EditTextWatcher(password));
name.addTextChangedListener(new EditTextWatcher(name));
button.setOnClickListener((View v) -> {
updateDatabase();
}
}
private class EditTextWatcher implements TextWatcher {
private View view;
private EditTextWatcher(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) {
}
@Override
public void afterTextChanged(Editable s) {
switch (view.getId()) {
case R.id.email:
validateEmail();
break;
case R.id.password:
validatePassword();
break;
}
}
}
private boolean validateEmail() {
String email = email.getText().toString().trim();
if (email.isEmpty() || !isValidEmail(email)) {
layoutEmail.setError(getString(R.string.err_msg_email));
requestFocus(email);
return false;
} else {
layoutEmail.setErrorEnabled(false);
}
return true;
}
private static boolean isValidEmail(String email) {
return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
private boolean validatePassword() {
String password = password.getText().toString().trim();
if (StringUtils.isEmpty(password) || !isValidPassword(password)) {
layoutPassword.setError(getString(R.string.err_msg_password));
requestFocus(password);
return false;
} else {
password.setErrorEnabled(false);
}
return true;
}
private void requestFocus(View view) {
if (view.requestFocus()) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
private boolean validatePassword() {
String password = password .getText().toString().trim();
if (StringUtils.isEmpty(password) || !isValidPassword(password)) {
layoutPassword.setError(getString(R.string.err_msg_password));
requestFocus(password);
return false;
} else {
layoutPassword.setErrorEnabled(false);
}
return true;
}
private static boolean isValidPassword(String password){
return !TextUtils.isEmpty(password) && PASSWORD_PATTERN.matcher(password).matches();
}