Android - избегайте закрытия AlertDialog (обработка ошибок)

Могу ли я узнать, как избежать закрытия AlertDialog, даже когда я нажимаю OK.

Причина этого в том, чтобы сделать простую обработку ошибок при неправильном вводе.

------------------------
Input password
------------------------

Password:______________

_______________________
   | OK |  | Cancel|

Я хочу, чтобы этот диалог оставался при неправильном вводе. так что пользователь может ввести снова.

Мой код:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("Insert Passcode");
                    final EditText input = new EditText(this);
                    input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_TEXT_VARIATION_PASSWORD);
                    builder.setView(input);

                    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            m_Text = input.getText().toString() ;
                            if (m_Text.equals(String.valueOf(passcode_value))){
                                btnAutoLogin.performClick();
                            }
                            else
                            {
                                  xxxxxxxxxxxxxxx
                            }
                        }
                    });
                    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });

                    builder.show();

person enzo    schedule 20.04.2015    source источник


Ответы (2)


Да, вы можете просто переопределить положительную функциональность кнопки следующим образом:

builder.setPositiveButton("OK", null);
    AlertDialog dialog = builder.create();
    dialog .show();
    dialog .getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
          // implement your code here
    });
person cool Boy    schedule 20.04.2015

Сначала создайте пользовательский класс прослушивателя для события нажатия кнопки следующим образом:

class CustomListener implements View.OnClickListener {
private final Dialog dialog;
public CustomListener(Dialog dialog) {
    this.dialog = dialog;
}
@Override
public void onClick(View v) {

    // Do whatever you want here

    // If tou want to close the dialog, uncomment the line below
    //dialog.dismiss();
}

}

И когда вы показываете диалоговое окно или инициализируете кнопку диалогового окна следующим образом:

AlertDialog dialog = dialogBuilder.create();
dialog.show();
Button button = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
button.setOnClickListener(new CustomListener(dialog));
person Rajan Bhavsar    schedule 20.04.2015