У меня есть код, который использует библиотеку диалогов материалов; У меня есть диалог с четырьмя полями EditText (электронная почта, имя, имя пользователя, пароль). Я хочу, чтобы кнопка Регистрация в диалоговом окне была отключена, если только во всех полях нет хотя бы одного символа.
Я искал вокруг и нашел способ сделать это; к сожалению, это не работает. Например, если я открываю диалоговое окно и ввожу что-либо в любое отдельное поле, кнопка становится доступной. Однако, если я редактирую одно поле, а затем редактирую другое поле, но затем удаляю текст внутри одного из этих полей, кнопка становится неактивной; то же самое произойдет, если я заполню все поля, а затем удалю текст внутри одного поля.
Я думал об использовании другого предложения (которое включало бы написание моего собственного частного внутреннего класса), но я не думал, что это будет иметь значение, учитывая, что я достиг того же (по крайней мере, насколько мне известно).
//registerDialog is a MaterialDialog object
final View registerAction = registerDialog.getActionButton(DialogAction.POSITIVE);
final EditText registerNameInput;
final EditText registerEmailInput;
final EditText registerUsernameInput;
final EditText registerPasswordInput;
if (registerDialog.getCustomView() != null) {
registerNameInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_name);
registerEmailInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_email);
registerUsernameInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_username);
registerPasswordInput = (EditText) registerDialog.getCustomView().findViewById(R.id.register_password);
/*
* TextWatcher lets us monitor the input fields while registering;
* This make sure we don't allow the user to register with empty fields
*/
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
registerAction.setEnabled(s.toString().trim().length() > 0);
}
@Override
public void afterTextChanged(Editable s) {
}
};
/*We want to watch all EditText fields for input*/
registerNameInput.addTextChangedListener(watcher);
registerEmailInput.addTextChangedListener(watcher);
registerUsernameInput.addTextChangedListener(watcher);
registerPasswordInput.addTextChangedListener(watcher);
}
registerDialog.show();
registerAction.setEnabled(false); //disabled by default