Я использую класс, который выходит из диалога, чтобы изменить пароль. Когда я нажимаю кнопку "Да", диалог закрывается. Я хочу, чтобы диалог не закрывался, если у меня неправильные данные.
Это мой код
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_yes:
if ((!TextUtils.isEmpty(newpass.getText().toString())) && oldpass.getText().toString().equals(Login_Activity.e.getPassword())) {
Login_Activity.e.password=newpass.getText().toString();
user.child(Login_Activity.e.getId()).setValue(Login_Activity.e);
dismiss();
} else {
yes.setBackgroundResource(R.color.red);
}
case R.id.btn_no:
dismiss();
break;
}
}
Спасибо за помощь
Вам нужно добавить оператор break
для case R.id.btn_yes
. Согласно документам:
Операторы break необходимы, потому что без них операторы в блоках переключателей не работают: все операторы после совпадающей метки регистра выполняются последовательно, независимо от выражения последующих меток регистра, до тех пор, пока не встретится оператор break.
В вашей ситуации нажимается кнопка с идентификатором btn_yes
, затем btn_yes
либо блок кода в if
либо в else
тогда поток программы продолжает выполнение кода в case R.id.btn_no
потому что он не был остановлен с прерыванием в соответствующем случае.
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_yes:
if ((!TextUtils.isEmpty(newpass.getText().toString())) && oldpass.getText().toString().equals(Login_Activity.e.getPassword())) {
Login_Activity.e.password=newpass.getText().toString();
user.child(Login_Activity.e.getId()).setValue(Login_Activity.e);
dismiss();
} else {
yes.setBackgroundResource(R.color.red);
}
break; // add this
case R.id.btn_no:
dismiss();
break;
}
}
Вы можете переопределить поведение автоотключения вручную, в зависимости от вашего диалогового класса.
Ответы на этот вопрос предлагают несколько способов добиться этого, например, заменить кнопку прослушивания onClick или даже отключить ее динамически, если ваши входные данные недействительны.